HTTP通信过程包括从客户端发往服务器端的请求以及从服务器端返回客户端的响应。
用于HTTP协议交互的信息被称为HTTP报文。HTTP报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分。通常,并不一定要有报文主体。
请求报文和响应报文的首部组成:
-
请求行:请求方法(如:POST、GET)、请求URI和HTTP版本
-
状态行:表明响应结果的状态码、原因和HTTP版本
-
首部字段:请求和响应的属性
-
其它:未定义的首部
报文message是HTTP通信中的基本单位,由 8 位组字节流(octet sequence,其中 octet 为 8 个比特)组成,通过 HTTP 通信传输。
实体entity作为请求或响应的有效载荷数据(补充项)被传输,由实体首部和实体主体组成。
HTTP报文的主体用于传输请求或响应的实体主体。通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
常见的内容编码:
-
gzip(GNU zip)
-
compress(UNIX系统的标准压缩)
-
deflate(zlib)
-
identity(不进行编码)
多部分对象集合(Multipart)
-
multipart/from-data 在Web表单文件上传时使用
-
multipart/byteranges 状态码206响应报文包含多个范围的内容时使用
指定范围发送的请求叫做范围请求Range Request,如对一份 10 000 字节大小的资源,如果使用范围请求,可以只请求5001~10 000 字节内的资源。
内容协商Content Negotiation,客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。
包含在请求报文中的某些首部字段就是判断的基准。如Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content- Language。
内容协商技术有以下 3 种类型:
-
服务器驱动协商(Server-driven Negotiation)由服务器端进行内容协商,以请求首部字段为参考。
-
客户端驱动协商(Agent- driven Negotiation)由客户端进行内容协商,用户从浏览器可选项中手动选择。
-
透明协商(Transparent Negotiation)是服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。