图解HTTP-3-HTTP报文内的HTTP信息

  1. HTTP报文
  2. 编码提升传输速率
  3. 获取部分内容的范围请求

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报文的主体用于传输请求或响应的实体主体。

    通常报文主体等于实体主体,只有在传输中进行编码操作时,实体主体内容发生改变,才导致它和报文主体产生差异。

  • 压缩传输的内容编码

    内容编码类似压缩文件,常用的内容编码有 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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏