HTTP 报文

用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。 HTTP 报文本身是由多行(用 CR+LF 作换行符) 数据构成的字符串文本。

报文首部
空行CR+LF
报文主体
HTTP报文的结构
报文首部:服务器端或客户端需处理的请求或响应的内容及属性

CR+LF:CR回车符,16进制0x0D;LF换行符,16进制0x0A

报文主体:应被发送的数据

请求报文及响应报文的结构

请求行
请求首部字段
通用首部字段
实体首部字段
其他
请求报文

状态行
响应首部字段
通用首部字段
实体首部字段
其他
响应报文

请求行:包含用于请求的方法, 请求 URI 和 HTTP 版本

状态行:包含表明响应结果的状态码, 原因短语和 HTTP 版本

首部字段:包含表示请求和响应的各种条件和属性的各类首部。一般有 4 种首部, 分别是: 通用首部、 请求首部、 响应首部和实体首部。

其他:可能包含 HTTP 的 RFC 里未定义的首部(Cookie 等)


编码提升传输速率

HTTP 在传输数据时可以按照数据原貌直接传输, 但也可以在传输过程中通过编码提升传输速率。 通过在传输时编码, 能有效地处理大量的访问请求。 但是, 编码的操作需要计算机来完成, 因此会消耗更多的 CPU 等资源。

报文主体和实体主体的差异

报文(message)

是 HTTP 通信中的基本单位, 由 8 位组字节流(octet sequence, 其中 octet 为 8 个比特) 组成, 通过HTTP 通信传输。

实体(entity)

作为请求或响应的有效载荷数据(补充项) 被传输, 其内容由实体首部和实体主体组成。

压缩传输的内容编码

常用的内容编码有以下几种。

gzip(GNU zip)

compress(UNIX 系统的标准压缩)

deflate(zlib)

identity(不进行编码)

分割发送的分块传输编码

在 HTTP 通信过程中, 请求的编码实体资源尚未全部传输完成之前, 浏览器无法显示请求页面。 在传输大容量数据时, 通过把数据分割成多块, 能够让浏览器逐步显示页面。
分块传输编码会将实体主体分成多个部分(块) 。 每一块都会用十六进制来标记块的大小, 而实体主体的最后一块会使用“0(CR+LF)”来标记

发送多种数据的多部分对象集合

多部分对象集合包含的对象如下。

multipart/form-data

在 Web 表单文件上传时使用。

multipart/byteranges

状态码 206(Partial Content, 部分内容) 响应报文包含了多个范围的内容时使用。

获取部分内容的范围请求

内容协商返回最合适的内容

内容协商制是指客户端和服务器端就响应的资源进行交涉, 然后提供给客户最为合适的资源, 内容协商会以响应资源的语言、 字符集、 编码方式等作为判断 基准。

内容协商技术的三种类型:

服务器驱动协商

客户端驱动协商

透明协商(上面两种的结合)






上一页  HTTP学习理解(一)

下一页  HTTP学习理解(三)