- HTTP报文message:用于HTTP协议交互的信息
- 通常分为报文首部和报文主体,由空行(CR+LF)来划分。不过不一定要有报文主体
- 请求报文和响应报文的结构
- 请求报文
- 请求行、各种首部字段(请求首部字段、通用首部字段、实体首部字段、其他)、报文主体
- 请求行:包含用于请求的方法,请求URI和HTTP版本
- 响应报文
- 状态行、各种首部字段(响应首部字段、通用首部字段、实体首部字段、其他)、报文主体
- 状态行:包含表明响应结果的状态码,原因短语和HTTP版本
- 其他首部字段
- 可能包含HTTP的RFC里未定义的首部,如Cookie
- 请求报文
- 编码操作:(传输过程中进行编码)提升传输速率
- 报文主体与实体主体差异
- __报文__是HTTP通信的基本单位,由8位组字节流组成,通过HTTP通信传输;__实体__是传输过程中被传输的补充项(有效载荷数据)
- 通常报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容才发生变化,导致与报文主体产生差异
- 内容编码:压缩传输
- 指明应用在实体主体上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接收并负责解码
- 服务端将实体主体压缩,响应给客户端解码复原
- 常用的内容编码
- gzip:GNU zip
- compress:UNIX系统的标准压缩
- deflate:zlib
- identity:不进行编码
- 分块传输编码:分割发送 Chunked Transfer Coding
- 将实体主体分成多块。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会用“0并换行”来标记
- 服务端将实体主体分块,响应给客户端解码复原
- HTTP/1.1中的传输编码机制:只定义作用于分块传输编码中,在通信时按某种编码方式传输
- 报文主体与实体主体差异
- 多部分对象集合Multipart:发送多种数据
- MIME(Multipurpose Internet Mail Extensions,多用途因特网邮件扩展)
- 允许邮件处理文本、图片、视频等多个不同类型的数据
- MIME扩展中会使用一种称为 __多部分对象集合__的方法,来容纳多分不同类型的数据
- HTTP协议中也采纳了类似MIME扩展中的 __多部分对象集合__方法,通常是资源上传时使用
- multipart/form-data
- 在Web表单文件上传时使用
- multipart/byteranges
- 状态码206(Partial Content部分内容)响应报文包含了多个范围的内容时使用
- Content-type:Multipart;boundary=实体
- 起始行:–实体;结束:–实体–
- multipart/form-data
- MIME(Multipurpose Internet Mail Extensions,多用途因特网邮件扩展)
- 范围请求:获取部分内容
- 能从之前下载中断处恢复下载,指定范围发送的请求交范围请求range request
- 首部字段Range指定资源的byte范围
- 5001-10000字节,Range:bytes=5001-10000
- 5001字节以后的全部,Range:bytes=5001-
- 从一开始到3000字节和5000到7000的 多重范围,Range:bytes=-3000, 5000-7000
- 针对范围请求,响应会返回状态码为206 partial content的响应报文
- 针对多重范围,会用到上述的Content-type:multipart/byteranges
- 若服务器无法响应范围请求,则返回200 OK和完整实体主体
- 内容协商:返回最合适的内容
- 会以响应资源的语言、字符集、编码方式等作为判断的基准,提供给客户端最为合适的资源
- 判断的基准为包含在请求报文中的某些字段
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
- 内容协商技术有三种类型
- 服务器驱动协商
- 原理:服务器以请求的首部字段为参考,在服务端自动处理
- 问题:以浏览器发送的信息作为判定依据,不一定能筛选出最优内容
- 客户端驱动协商
- 原理:用户从浏览器显示的可选项列表中手动选择
- 优势:可以利用JS脚本在Web页面上自动选择,比如按操作系统或浏览器类型自行切换PC版或移动版
- 透明协商
- 上述两种类型的结合体,两端各自进行内容协商
- 服务器驱动协商
HTTP报文内的HTTP信息copyright《图解HTTP》读书笔记
最新推荐文章于 2019-03-11 22:34:54 发布