图解HTTP
前言
在看这本书之前,已经看过《TCP/IP详解》,整本书很详实,但是比较晦涩。还有一本《HTTP权威指南》因为同样的原因我只是浅尝辄止。所以,一直想看这本书很久了。因为图解,可以通俗易懂翻来当漫画看,还可以复习下HTTP。
通过这本书复习下知识,内容与原书不尽相同,但是图可能是相同的。:)
TCP/IP协议族
之前两章稍微介绍了下HTTP标准的历史之后,包括1996年5月的HTTP/1.0协议标准,以及1997年1月的HTTP/1.1协议标准。之后,来到了重要的网络基础协议族TCP/IP。
在网络中各层情况如下:
- 应用层
- FTP/DNS
- 传输层
- TCP,UDP
- 网络层
- 链路层
TCP协议是传送的数据报,通过将大数据分割成报文段的方式管理数据的传输。这样处理也能在一定程度上确保每段数据的可靠性。
Three-Way Handshaking三次握手协议
简单的HTTP协议
HTTP是不保存状态的协议。这里指的是HTTP/1.1,为了解决传输数据持久化的问题,引入了Cookie技术。
HTTP方法
- GET:请求访问已被URI识别的资源。
- POST:传输实体的主体。
- PUT:传输文件。1.1中不带验证机制,出于安全性,所以弃用。采用REST(REpresentational State Transfer,表征状态转移)。
- HEAD:获得报文的首部。
- DELETE:删除文件。
- OPTIONS:询问支持的方法。
- TRACE:追踪路径。XST(Cross-Site Tracing, 跨站追踪)。
- CONNECT:要求用隧道协议连接代理。要求在与代理服务器通信时,建立隧道,通过隧道协议进行通信。主要使用SSL和TLS加密通信内容,通过网络隧道传输。
持久连接节省通信量
WEB通信早期多为纯文本传输,由于数据报文相对小,对于每次的资源请求和响应,TCP链接断开连接的开销可能不明显。但是当WEB上资源影音资源丰富起来之后,必须减少通信开销。
1.1中的HTTP keep-alive保证了持久连接,这也是在1.1中默认的。在TCP连接之后,可以进行多次的HTTP请求和响应。
多次请求和响应引出了管线化技术,并行发送多个请求。
使用Cookie的状态管理
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。客户端在首次请求数据后(无cookie状态),服务器生成cookie,并加入响应返回给客户端。当该客户端再次向服务器请求响应时,在请求中添加之前从服务器获得的cookie,服务器接受到该cookie即可辨别身份。
HTTP报文
- 报文首部:服务器或者客户端需处理的请求或响应的内容及属性。
- 空行(CR+LF):CR(Carriage Return,回车符:16进制0x0d)。LF(Line Feed,换行符:16进制0x0a)
- 报文主体
编码提升传输速率
**报文**message,HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。
**实体**entity,作为响应和请求的有效载荷数据被传输,内容由实体首部和实体主体组成。
内容编码
将实体内容编码压缩,进行传输。1.1中存在传输编码机制,实际上指的就是将实体主体分成多个块,编码传输。
MIME(Multipurpose Internet Mail Extensions)
该机制允许邮件处理文本,图片,视频等不同类型的数据。
获取部分内容的范围请求
响应状态码206 Partial Content。
内容协商返回最合适的内容
客户端就响应的资源和服务器进行协商,内容协商包括相应资源的语言,字符集和编码方式。
内容协商技术
服务器驱动协商
客户端驱动协商
透明协商
HTTP状态码
返回码 | 类别 | 原因短语 |
---|---|---|
1** | Informational | 接收的请求正在处理 |
2** | Success | 请求正常处理完毕 |
3** | Redirection | 需要进行附加操作以完成请求 |
4** | Client Error | 服务器无法处理请求 |
5** | Server Error | 服务器处理请求出错 |
代理
- 缓存技术:缓存代理会预先将资源的副本保存在代理服务器上,当代理接收到对相同资源的请求时,就可以不去访问源服务器取资源,而是将之前的缓存资源作为响应返回。
- 修改报文:代理服务器转发请求或者响应时,不对报文进行加工的称作透明代理。
网关
通信线路上的服务器提供非HTTP协议服务
隧道
隧道可按照要求建立起一条与其他服务器的通信线路,使用SSL加密手段进行通信。
保存资源的缓存
只要代理服务器缓存资源是有效的,就可以不用访问源服务器,直接向客户端返回请求的资源。
HTTP首部
HTTP首部字段
HTTP首部字段包括了重要的信息,包括报文大小,所使用语言以及认证信息。
4种HTTP首部字段类型
- 通用首部字段(General Header Fields)请求和响应报文两方都会使用的首部。
- 请求首部字段(Request Header Fields)
- 响应首部字段(Renpose Header Fields)
- 实体首部字段(Entity Header Fields)
HTTPS
HTTP协议本身并没有安全机制,通过结合SSL和TLS可以加密HTTP的通信内容。HTTP Secure或者HTTP over SSL,就是通过SSL建立了安全通信线路,来保证HTTP的通信安全。
验证身份需要第三方授予证书。
报文完整性保证。
HTTPS=HTTP+加密+认证+完整性保护
这一章涉及信息安全,主要是CA认证,非对称加密。