图解HTTP-3-HTTP报文内的HTTP信息
HTTP报文
用于HTTP协议交互的信息被称为HTTP报文。HTTP报文是由多行(用CR+LF坐换行符)数据构成的字符串文本。
请求端的HTTP报文叫做 请求报文
响应端的叫做 响应报文
HTTP报文大致分为报文首部和报文主体两块(由空行划分),通常并不一定要有报文主体。
- 请求报文结构
- 报文首部
- 请求行
包含用于请求的方法,请求URI和HTTP版本GET/HTTP/1.1
- 请求首部字段
- 通用首部字段
- 实体首部字段
- 其他
- 请求行
- 空行(CR+LF)
- 报文主体
- 报文首部
- 响应报文结构
- 报文首部
- 状态行
包含表明响应结果的状态码,原因短语和HTTP版本HTTP/1.1 200 OK
- 响应首部字段
- 通用首部字段
- 实体首部字段
- 其他
- 状态行
- 空行(CR+LF)
- 报文主体
- 报文首部
编码提升传输速率
HTTP在传输数据时进行编码,可以有效地处理大量的访问请求。
报文主体和实体主体
- 报文(message)
是HTTP通信的基本单位,由8位组字节流组成,通过HTTP通信传输。 - 实体(entity)
作为请求或响应的有效载荷数据被传输,内容由实体首部和实体主体组成。
HTTP报文的主体用于传输请求或响应的实体主体。
通常报文主体等于实体主体,只有在传输中进行编码操作时,实体主体内容发生改变,才导致它和报文主体产生差异。
- 报文(message)
压缩传输的内容编码
内容编码类似压缩文件,常用的内容编码有 gzip、compress、deflate、identity
内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。
分割发送的分块传输编码
在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步加载页面。这种功能叫做分块传输编码。
分块传输编码会将实体主体分成多个部分,每一块用16进制来标记块的大小,而实体主体最后一块会使用”0(CR+LF)”来标记。
客户端负责解码,恢复到编码前的实体主体。
获取部分内容的范围请求
如果下载过程中遇到网络中断的情况,那就必须重头开始,为了解决上述问题,需要一种可恢复的机制。即能从之前下载中断处恢复下载。
执行范围请求时,会用到首部字段Range来指定资源的byte范围
Range: bytes = 5001-10000
5001-10000字节
Range: bytes = 5001-
从5001字节之后全部的
Range: bytes = -3000,5000-7000
从头开始3000字节和5000-7000
对于此类请求,响应会返回状态码为206 Partial Content的响应报文。 对于多重范围的请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文。
注: 如果服务端无法响应范围请求,则会返回状态码 200 OK 和完整的实体请求。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yanglau0527@gmail.com
文章标题:图解HTTP-3-HTTP报文内的HTTP信息
文章字数:807
本文作者:Cynaith
发布时间:2020-05-25, 15:43:16
最后更新:2020-05-25, 16:23:22
原始链接:https://cynaith.github.io/2020/05/25/%E5%9B%BE%E8%A7%A3HTTP-HTTP%E6%8A%A5%E6%96%87%E5%86%85%E7%9A%84HTTP%E4%BF%A1%E6%81%AF/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。