图解HTTP -- HTTP报文

3 章 HTTP 报文

用于 HTTP 协议交互的信息称为 HTTP 报文。请求端的叫做请求报文。响应端的叫做响应报文。HTTP 报文本身是由多行数据构成的字符串文本。

大致可以分为报文首部和报文主体两块,由最初的空行来划分。通常不一定有报文主体。

请求与响应报文的结构

请求报文:

  • 请求行:包含用于请求的方法,请求 URI 和 HTTP 版本
  • 请求首部字段
  • 通用首部字段
  • 实体首部字段
  • 其他(可能包含 HTTP 的 RFC 里的未定义首部,比如 cookie)
  • 空行
  • 报文主体

响应报文:

  • 状态行:包含表明响应结果的状态码,原因短语和 HTTP 版本
  • 响应首部字段
  • 通用首部字段
  • 实体首部字段
  • 其他
  • 空行
  • 报文主体

注:cookie 并不是在 HTTP 的 RFC 里的,他是 IETF 的另一个规范 HTTP 状态规范里的。不过也没必要深究,都是规范就是了。

编码提升传输效率

就是讲内容进行压缩后再传给客户端,用户端再进行解码,内容编码有以下几种:Gzip,compress,deflate,identity

分块传输编码

就是将实体主体分为多个部分,每一块都用 16 进制来标记大小。

发送多种数据的多部分对象集合

比如邮件采用了 MIME,于是我们可以添加文本,图片,视频等多种不同类型的数据。

HTTP 协议里面也采纳了多部分对象集合。

  • multipart/form-data:web 表单文件上传时使用
  • multipart/byteranges:报文包含多个范围的内容时使用,每个部分都可以有自己的头部

获取部分内容的范围请求

下载过程中如果出现了中断,就需要恢复的机制,就是从之前中断处恢复下载。

就是指定范围发送的请求。

Range: bytes=-3000,5000-10000

还可以发送多个范围的请求

范围请求如果支持的话,会返回 206 的结果好报文,如果是多范围的话,那就是 multipart/byteranges 的结果。如果不支持的话,那就是状态码 200 和完整的实体内容。

这个功能得是后端支持的,目前在前端界还没有使用过,因为前端也没有下载大量数据的需求

内容协商返回最合适的内容

服务器来根据内容返回,或者客户端自动根据 UA 来跳转,或者服务器和客户端各自进行内容协商的方法。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com

文章标题:图解HTTP -- HTTP报文

文章字数:670

本文作者:泽鹿

发布时间:2019-08-28, 16:45:23

最后更新:2019-08-28, 16:45:23

原始链接:http://panyifei.github.io/2019/08/28/读书笔记/图解HTTP/3章HTTP报文/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏