本文主要介绍请求及响应的运作过程
1. 定义
用于 HTTP 协议交互的信息叫做报文,请求端的 HTTP 报文叫请求报文,响应端的 HTTP 报文叫响应报文。
2. 报文结构
HTTP 报文由报文首部和报文主体构成,两者由空行划分 (报文主体不是必需的)
请求报文和响应报文组成:
HTTP 传输数据时可通过编码提升传输速率,通过在传输时编码也可有效地处理大量访问请求
缺点:编码操作会消耗更多的CPU等资源
两者间关系: HTTP报文的主体用于传输请求或响应的实体主体,通常报文主体等于实体主体,只有传输时出现编码操作时,实体主体内容发生变化,使得两者间产生区别
1. 内容编码: 应用在实体内容上的编码格式,保持实体原样压缩 (客户端负责接收及解码)
2. 常用的内容编码:
gzip (GUN zip)
compress (UNIX 系统的标准压缩)
deflate (zlib)
identify (不进行编码)
传输大容量数据时,分块发送,使浏览器逐步显示。这种把实体主体分块的功能叫做分块传输编码。使用分块传输编码的实体主体由接收的客户端负责解码,恢复到编码前的实体主体。
实现:
HTTP / 1.1 中存在一种 Transfer Coding 机制,可以在通信时按某种编码方式传输,只定义与分块传输编码
1. MIME : 全称 Multipurpose Internet Mail Extensions(多用途因特网邮件扩展)机制,邮件之所以能处理文本、图片、视频等多种不同类型的数据就是因为采用了这种机制标记了数据类型。在 MIME 中使用多部分对象集合(Multipart)的方法来容纳多份不同类型的数据。
2. HTTP && 多部分对象集合(Multipart): HTTP 也采纳了多部分对象集合,一份报文主体内可含有多类型实体,主要使用场景为图片或文本文件上传。
3. 多部分对象集合包含的对象:
使用 boundary 字符串划分多部分对象集合指明的各类实体。各个实体的起始行前加入“- - ”标记,在多部分对象集合对象的字符串的最后插入 “- - ”标记作为结束。
HTTP 报文使用多部分对象集合时,需要在首部字段加入 Contene-type 字段
4. 多部分对象集合的使用: 多部分对象集合的每个部分类型种都可以含有首部字段,还可以在某个部分种嵌套多部分集合,具体内容参考 RFC2046
范围请求指需要指定 下载的实体范围 的请求,其可作为下载过程中遇到网络中断的处理机制。
Range : bytes= 5001-10000
Range : bytes= 5001-
Range : bytes=-3000,5000-7000
2. 范围请求返回报文状态码: 206 —— Partial Content
对于多重范围的范围请求,在首部字段 Content-Type 表明 mutipart / byteranges
内容协商指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户最为合适的资源,其以响应资源的语言、字符集、编码方式作为判断的基准。
1. 小实例: 访问相同 URI 的 Web 页面,会根据浏览器的默认语言显示中文还是英文
2. 内容协商判断基准—— 包含在请求报文中的某些首部字段:
3. 内容协商类型
(1) 服务器驱动协商
由服务器参考浏览器发出请求的首部字段,在服务器端自动处理。对用户来说,以浏览器发送的信息作为内容协商的依据,不一定是最优的。
(2) 客户端驱动协商
用户从浏览器显示的选项列表中手动选择
(3) 透明协商
前两者的结合体
尾注:今天就不碎碎念废话了,如有疑问,欢迎与我交流,为在成长中的你加油!!!