HTTP 图解知识梳理
1. 了解web及网络基础
- 网络基础TCP/IP
- 协议:所有不同的硬件,操作系统之间的通信规则
- TCP/IP概念:与互联网相关联的集合
- 分层管理:
- 应用层:决定向用户提供应用服务时的通信活动。TCP/IP协议族内预存了各类通信的应用服务,如FTP和DNS及HTTP。
- 传输层:对上层应用层,提供处于两台网络连接中的两台计算机之间的数据传输。包含两个性质不同的协议(TCP:transmission Control Protocol,UDP:User Data Protocal)
- 网络层:处理在网络中流动的数据包(网络传输的最小数据单位)。决定通过怎样的传输路线到达对方计算机并把数据包传达。通常作用是在众多选项内选择一条传输路线。
- 数据链路层: 用来处理网络的硬件部分(OS,驱动,NIC网卡及光纤)。
- 发送端在层间传输数据时,每经一层被打上该层所属的首部信息;反之接受短消去该层的首部信息。这种把数据信息包封装起来的做法称为封装(encapsulate)
- IP/TCP/DNS
- IP协议(Internet Protocol):
- 功能:负责传输;
- 位置:网络层;
- 作用:传送各种数据包,其中两个重要地址(IP地址和MAC(Media Access Control)地址);
- IP地址指明了节点被分配的地址,MAC地址指网卡所指的物理地址。IP地址和MAC地址可配对,IP地址可变,MAC地址一般不会变;
- ARP(Address Resolution Protocol)协议:解析地址的协议,根据通信双方的IP地址反查其MAC地址;
- 无人能全面掌握互联网中的传输状况。
- 确保可靠的TCP协议:
- 位置:传输层;
- 作用:提供可靠的字节流服务(Byte Stream Service)–为方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理,即TCP为了方便传送大数据而分隔,并能确认数据最终是否到达对方;
- 确保数据到达目标:三次🤝(three-way handshaking)
- TCP的flag:SYN(synchronize)和ACK(acknowledgement)
- syn
- syn + ack
- ack

- TCP的flag:SYN(synchronize)和ACK(acknowledgement)
- IP协议(Internet Protocol):
- 域名解析的DNS(Domain Name System)服务(应用层)
- 作用: 提供Domain到IP地址之间的解析服务 。为了解决IP地址难记问题,DNS提供了IP与Domain Name之间的map关系。
- 各种协议与HTTP协议间的关系

- URI(Uniform Resource Identifier) & URL(Uniform Resource Location),前者标识某一互联网资源,后者表示资源地点。
- URI:某个协议方案表示的资源定位标识符。
- U:格式统一可处理各种资源且无需据上下文来识别资源的访问方式,且易于新增协议方案(http/ftp);
- R:可标识的任何东西;
- I:可标识的对象。
- URI:某个协议方案表示的资源定位标识符。
格式:
- scheme:数据或脚本程序的方案名;
- certification:登陆认证,可选;
- url:
- port:
- path&file:带层次的文件路径,可选;
- query:查询字符串,可选;
- fragment identifier:片段标识符,标记已获取资源中的子资源。
| scheme | certification | url | port | path | file | query | fragment identifier | — |
|---|---|---|---|---|---|---|---|---|
| http:// | user:pass@ | www.example.jp: | 80/ | dir/ | index.html? | uid=1 | #ch1 |
2. 简单的HTTP协议
客户端:请求访问文本或图像等资源的一端;服务端:提供资源响应的一端。
- 请求报文的组成

- HTTP是无状态(stateless)协议:
- 本身不保存(持久化处理)请求和响应之间的通信状态。cookie🉑️用于保存状态。
- 告知Server意图的HTTP方法
- GET:获取资源,请求已被URI识别的资源。🈯️定的资源经Server解析后🔙响应内容。
- POST:传输实体的主体,主要目的不是获取响应的主体内容。
- PUT:传输文件,本身不带验证机制,任何人都可以上传文件,存在安全性问题,不推荐。若架构设计采用REST标准的同类web网站,则可以开放PUT方法。
- HEAD:只获取报文首部。
- DELETE:与PUT相反。
- OPTIONS:询问支持的方法。
- TRANCE:追踪路径,让web服务器将之前的请求通信返回给客户端。
- CONNECT:要求用隧道协议🔗代理,实现用隧道协议进行TCP通信。
- 持久连接节省通信量
- 持久连接(HTTP Persistent Connections):若任意一端明确提出断开连接则断开。
- 管线化(piping line):不用等待响应即可发送下一个请求。
- 使用cookie状态管理
- 原理:cookie根据从服务端发送的响应报文内的一个叫Set-Cookie的首部字段信息,通知客户端保存cookie。当下次客户端再向该服务器发送请求时,客户端会自动在请求报文中加入cookie值后发送出去。

3. HTTP报文内的HTTP信息
- HTTP报文:用于HTTP协议交互的信息。🈶️多行数据构成的字符串文本。
- 报文首部:服务器端或客户端需要处理的请求或响应的内容即属性。
- 空行:CR + LF。
- 报文主题:被发送的数据,🉑️选。
- 结构:

- 请求行:包含method,uri和http version。
- 状态行:包含表明响应结果的状态码,原因短语和http版本。
- 首部字段:包含表示请求和响应的各种条件和属性的各类首部。
- 通用首部
- 请求首部
- 响应首部
- 实体首部
- 其它:可能包含http的rfc里未定义的首部(Cookie etc)。
- 编码提升传输速率(通过在传输🀄️编码,🉑️有效处理大量的访问请求;但也会消耗更多的CPU资源)
- 报文主体和实体主体
- 报文(message):http通信的基本单位,通过http通信传输,由八位字节流组成。
- 实体(entity):作为请求或响应的有效载荷数据被传输,由实体首部和实体主体组成。通常报文主题等于实体主体,只有当传输🀄️🈶️编码操作时才有差异。
- 压缩传输分内容编码
- 内容编码:指明应用在实体🀄️的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接受并负责解码。
- 常见内容编码:
- gzip(GUN zip)
- compress(UNIX系统)
- deflate(zlib)
- identity(不编码)
- 分隔发送的分块传输编码
- 分块传输编码:把实体主体分块的功能。
- 发送多种数据的多部分对象集合
- 多用途因特网(MIME,multipurpose Internet Mail Extensions)机制:允许📧处理图片,文本,视频等多个不同类型的数据。
- 包含:
- multipart/form-data:web表单文件⏫使用;
- multipart/byteranges:状态码206响应报文包含了多个范围内容时使用;
- 获取部分内容范围请求
- 范围请求(Range Request):🈯️定范围发送的请求。
- 内容协商🔙最合适的内容
- 内容协商(Context Negotiation):当浏览器默认语言是英文或中文,访问相同URI的web📃时,会显示对应英文版或中文版的📃机制。
- 机制:客户端和服务端就响应的资源进行交涉,然后提供给客户端最为合适的资源。其基准会是语言,字符集,编码方式等。如请求报文中的首部字段 :
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
- 内容协商技术分类:
- 服务器驱动协商(Server-driven Negotiation)
- 客户端驱动协商(Agent-driven Negotiation)
- 透明协商(Transparent Negotiation)
- 报文主体和实体主体
4. 返回结果的HTTP状态码
- 状态码:
- 作用:告知从服务器🔙的请求结果,标记服务端的处理是否异常,通知出现的❌等工作;
- 类别:
| 类别 | 原因短语 | |
|---|---|---|
| 1xx | informational | 接受的请求正在处理 |
| 2xx | success | 请求正常处理完毕 |
| 3xx | redirection | 需要进行附加操作以✅请求 |
| 4xx | client error | 客户端无法处理结果 |
| 5xx | server error | 服务端无法处理结果 |
- 2xx成功
- 200:👌,从客户端发来的请求在服务端正常处理 ;
- 204:no-content,服务器接受的请求已成功处理,但在🔙的请求报文中不含实体的主体部分且❎返回任何实体的主题部分。一般在只需客户端往服务器发送💻,而对客户端不需要发送新信息内容时用。
- 206:partial content,客户端进行了范围请求,而服务器成功执行了该部分的GET请求。
- 3xx重定向:浏览器需要执行某些特殊处理以正确处理请求。
- 301:moved permanently,永久性🐛定向;
- 302:found,临时性重定向;
- 303:see other;
- 304:not modified ;
- 307:temporary redirect。
- 4xx:
- 400:bad request;
- 401:unauthorized;
- 403:forbidden;
- 404:not found。
- 5xx:
- 500:internal server error;
- 503:service unavailable.
5. 与HTTP协作的Web服务器
一台web服务器可以搭建多个独立域名的web网站,也可作为通信路径上的中转服务器提升传输效率。
- 用单台虚拟主机实现多个域名
- HTTP/1.1规范✅一台http服务器搭建多个web站点。
- 通信数据转发程序:代理,网关,隧道
- 代理:一种具有转发功能的应用程序,扮演了客户端和服务端间的中间人🎭;
- 基本行为:接受客户端发送的请求后转发给其它服务器。不改变请求url,会直接发送诶前方源服务器。
- 源服务器: 持有资源的目标服务器;
- 使用代理理由:
- 利用缓存技术减少网路带宽的流量;
- 组织内部针对特定网站的访问控制;
- 获取访问日志等。
- 分类:
- 缓存代理:使用缓存;
- 透明代理: 转发请求或响应时不对报文做任何加工。
- 网关:转发其它服务器通信数据的服务器。
- 与代理类似,能提为使通信线路上的服务器提供非http协议服务。
- 隧道:在相隔甚远的客户端和服务端之间进行中转,并保持双方通信🔗的应用程序。
- 目的:确保🔐;
- 代理:一种具有转发功能的应用程序,扮演了客户端和服务端间的中间人🎭;
- 保存资源的缓存:
- 缓存:代理服务器或客户端本地磁盘内保存的资源副本。
6. HTTP首部
- http报文首部:客户端和服务端处理时起至关重要作用的信息
- 请求报文组成:
- 方法,
- URI,
- HTTP版本,
- HTTP首部字段(请求,通用,实体)
- 响应报文组成:
- HTTP版本,
- 状态码,
- HTTP首部字段
- 请求报文组成:
- HTTP首部字段
- 传递重要信息(报文主体大小,语言,认证信息等)
- 结构:
首部字段名:字段值 - 4种类型:
- 通用。。(general header fields)
- 请求。。(request)
- 响应。。 (response)
- 实体。。(entity)
首部字段一览表:
- 非HTTP首部字段
7. 确保Web安全的HTTPS
在HTTP协议中可能存在信息窃取或身份🆔伪装等安全🔐问题,而HTTPS🉑️有效防止此类问题。
- HTTP的缺点:
- 通信使用明文(不加密),内容可能被窃听;
- 不验证通信方的身份,有可能遭遇伪装;
- 无法证明报文完整性,有可能已遭篡改
- 通信的加密🔐
- 加密机制:
- SSL(Secure Socket Layer):安全套接字
- TLS(Transport Layer Secure):安全传输层协议。
- HTTPS(HTTP over SSL):HTTP + SSL + 认证 + 完整性保护
- 加密机制:
8. 确认访问用户身份的认证
某些web📃只想让特定人访问,用户🆔认证应运而生。
- 何为认证?
- 核对信息:
- 密码:只有本人才知道的字符串;
- 动态令牌:仅限本人持有的设备内显示的一次性密码;
- 数字🔢📄证书:仅限本人持有的信息;
- 生物认证:指纹和虹膜等本人的生理信息;
- IC卡等:仅限本人持有的信息。
- HTTP/1.1使用的认证:
- BASIC认证
- DIGEST认证
- SSL客户端认证
- FormBase认证(并不在http协议中定义)
- 客户端会向web服务器上的app发送登陆信息(credential),按登陆信息的验证结果认证。
- 认证多半基于表单认证
- session管理及cookie应用(cookie管理session弥补了http协议无状态的不足)
- 核对信息:
9. 基于HTTP的功能追加协议
- 消除http瓶颈的spdy
- http瓶颈:
- 一条连接上只能发送☝️请求;
- 请求只能从客户端开始。客户端不能接收除响应以外的指令;
- 请求/响应首部未经压缩就发送。首部信息越多延迟越大。
- 发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
- 🉑️任意选择数据压缩格式。非强制压缩发送。
- 解决方法:
- ajax:
- comet:
- spdy:
- http瓶颈:
- 使用浏览器进行全双工通信的websocket
- 期盼已久的http2.0
- web服务器管理文件📃的webdav
10. 构建Web应用的技术
pass
11. Web的攻击技术
针对web的攻击技术:简单的http本身不存在安全性问题,协议本身几乎不会称为被攻击的对象。应用http协议的客户端和服务端,及运行在服务器上的web应用才是攻击目标。
在客户端🉑️篡改请求: 在http请求报文内加载攻击代码,就能发起对web应用的攻击。通过url查询📖字段,http首部,cookie等途径把攻击代码传入。
针对web应用的攻击模式:
- 以服务器为目标的主动攻击:攻击者通过直接访问web应用,把攻击代码传入。SQL注入和OS命令注入。
- 以服务器为目标的被动攻击: 利用圈套策略执行攻击代码。常见步骤如下:
- 攻击者诱导用户触发已设置好的陷阱,而陷阱会启动发送已嵌入好的http请求;
- 当用户无知🀄️中招后,用户浏览器或📧客户端就会触发这个陷阱;
- 中招后的用户浏览器会把含有攻击代码的http请求发送给作为攻击目标的web应用,运行攻击代码;
- 执行完攻击代码,存在安全漏洞的web应用会成为攻击者的跳板,可能导致用户所持的cookie等个人👤信息被窃取,登陆状态的用户权限遭恶意滥用等后果。
因输出值转译不完全引发的安全漏洞
- 跨站脚本攻击XSS(cross-site scripting): 通过存在安全漏洞的web网站注册用户的浏览器内运行非法的html标签🏷️或JavaScript进行的攻击。
- 利用虚假输入表单骗取用户信息;
- 利用脚本窃取用户cookie值,被害者在不知情情况下帮助攻击者发送恶意请求;
- 显示伪造的文章或图片。
- 跨站脚本攻击XSS(cross-site scripting): 通过存在安全漏洞的web网站注册用户的浏览器内运行非法的html标签🏷️或JavaScript进行的攻击。

Leave a Comment