图解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" 转载请保留原文链接及作者。