本文正在参与 “网络协议必知必会”征文活动
HTTP通信过程包括从客户端发往服务器端的请求以及从服务器端返回客户端的响应,这篇内容主要了解下请求和响应是怎么样运作的
HTTP报文的相关概念
- HTTP协议交互的信息被称为
HTTP报文
- 客户端的HTTP报文被称为
请求报文
- 服务器端的HTTP报文被称为
响应报文
HTTP报文大致可分为报文首部和报文主体
- 报文首部:服务器端或客户端处理的请求或响应的内容及属性
- 报文主体:要被发送的数据
请求报文及响应报文的结构
请求报文和响应报文的首部内容由以下数据组成
-
请求行(包含用于请求的方法,请求的URI和HTTP版本)
-
状态行 (包含表明响应结果的状态码,原因短语和HTTP版本)
-
首部字段 (包含请求和响应的各种条件和属性的各类首部)
一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部
通过编码提升HTTP传输数据的速率
HTTP 在传输数据时可以按照数据原貌直接传输,也可以在传输过程中通过编码提升传输速率。通过在传输时编码,能有效地处理大量访问请求,同时也会消耗更多的CPU等资源
报文主体和实体主体的区别
-
报文
报文是HTTP通信中的基本单位
-
实体
请求或响应的实际数据,其内容由实体首部和实体主体组成
HTTP报文主体的作用:传输请求或响应的实际数据
通常,报文主体就等于实体主体,只有当传输中进行编码操作时,实体主体内容会发送变化,才会导致实体主体与报文主体产生差异
对传输的内容编码压缩
当给邮件添加附件时,为了使邮件内容变小,通常会对附件内容进行压缩。HTTP协议中的内容编码也是这个意思
常见的内容编码有以下几种
gzip(GUN zip)
compress(UNIX 系统的标准压缩)
deflate(zlib)
identity(不进行编码)
分割发送的分块传输编码
- 分块传输编码:在HTTP通信过程中,请求的数据尚未全部传输完成之前,浏览器是无法显示请求页面的,当传输大量数据时,通过会把数据分割成多块,能够让浏览器逐步显示页面。这种把实体数据分块的功能称为分块传输编码
- 分块传输的块大小:分块传输编码每一块都用十六进制标记块大小
- 使用分块传输编码的实体主体由接收客户端负责解码
发送多种数据的多部分对象集合
发送邮件时,邮件中可以加入多种附件,如文本、视频、图片等等,这是因为采用了MIME(多用途因特网邮件扩展)机制。HTTP协议中也采用了多部分对象集合,发送报文主体内可含有多类型实体。通常是图片或文本文件上传时使用。
在HTTP报文中使用多部分对象集合时,需要在首部字段里加上 Content-type
获取部分内容的范围请求
以前,用户还不能使用如今这种高速的宽带访问互联网,当时,下载一张较大图片非常吃力,如果在下载过程中网络中断,那就必须重新下载,为了解决上述问题,需要一种可恢复机制,所谓恢复是指能从之前下载中断的位置恢复下载
要实现该功能需要指定下载图片的实体范围,指定范围的请求叫做范围请求
执行范围请求时,会用到首部字段Range
来指定资源的字节范围。如对一份10 000 字节大小的资源,可以只请求5001~10 000字节内的资源,
内容协商
-
当浏览器的默认语言为英语或中文,访问相同URI的Web页面时,则会显示对应的英语版或中文版的 Web 页面。这样的机制称为
内容协商
-
内容协商机制
是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准 -
内容协商技术有以下三种类型
- 服务器驱动协商(以请求的首部字段为参考,在服务器端自行处理)
- 客服端驱动协商(用户从浏览器显示的可选项列表中手动选择)
- 透明协商(服务器驱动和客户端驱动的结合体,由服务器端和客户端各自进行内容协商的一种方法)