- HTTP 要确保它所承载的“货物”满足以下条件:
- 可以被正确地识别(通过 Content-Type 首部说明媒体格式,Content- Language 首部说明语言),以便浏览器和其他客户端能正确处理内容;
- 可以被正确地解包(通过 Content-Length 首部和 Content-Encoding 首部);
- 是最新的(通过实体验证码和缓存过期控制);
- 符合用户的需要(基于 Accept 系列的内容协商首部);
- 在网络上可以快速有效地传输(通过范围请求、差异编码以及其他数据压缩方法);
- 完整到达、未被篡改(通过传输编码首部和 Content-MD5 校验和首部)。
- 为了实现这些目标,HTTP 使用了完善的标签来描述承载内容的实体。
报文是箱子,实体是货物
- 如果把 HTTP 报文想象成因特网货运系统中的箱子,那么 HTTP 实体就是报文中实际的货物。
- 报文实体由实体首部和实体主体组成,实体首部描述了 HTTP 报文的内容,实体主体中就是货物:
- 实体首部:任何其他描述性的信息都包含在首部中,用来描述实体主体中数据的意义。首部介绍见3.5 首部。
- 实体主体:实体主体中就是原始货物(如果有 Content-Encoding 首部的话,实体主体的内容就已经被指定的内容编码算法进行过编码了,第一个字节就是编码(比如,压缩)后的货物的第一个字节)。
- 首部字段以一个空白的 CRLF 行结束,随后就是实体主体的原始内容。不管内容是什么,文本或二进制的、文档或图像、压缩的或未压缩的、英语、法语或中文,都紧随这个 CRLF 之后。
- 下图展示了两个实际的 HTTP 报文的例子。一个携带着文本实体,另一个承载的是图像实体。十六进制的数值中展示的是报文的实际内容:
- a 中,实体主体从第 65 个字节开始,紧随首部末尾的 CRLF。实体主体中包含了“Hi! I’m a message!”这句话的 ASCII 编码字符。
- b 中,实体主体从第 67 字节开始。实体主体包含了一个 GIF 格式图像的二进制内容。GIF 文件以 6 个字节的版本标志开头,后面是 16 位的宽度和 16 位的高度。可以在实体主体中直接看到这 3 项内容。