第15章 实体和编码
每天都有数以亿计的各种媒体对象经由 HTTP 传送,如图像、文本、影片以及软件程序等。只要你能叫出名字,HTTP 就可以传送。HTTP 还会确保它的报文被正确传送、识别、提取以及适当处理。具体说来,HTTP 要确保它所承载的“货物”满足以下条件。
可以被正确地识别(通过
Content-Type
首部说明媒体格式,Content-Language
首部说明语言),以便浏览器和其他客户端能正确处理内容。可以被正确地解包(通过
Content-Length
首部和Content-Encoding
首部)。是最新的(通过实体验证码和缓存过期控制)
符合用户的需要(基于
Accept
系列的内容协商首部)在网络上可以快速有效地传输(通过范围请求、差异编码以及其他数据压缩方法)
完整到达、未被篡改(通过传输编码首部和
Content-MD5
校验和首部)
为了实现这些目标,HTTP 使用了完善的标签来描述承载内容的实体。
本章讨论各种实体、与它们相关的实体首部以及它们是如何运作来传送网站“货物”的。我们将展示 HTTP 是如何提供必需的内容大小、类型以及编码的。我们还要解释 HTTP 实体的某些更复杂和强大的特性,比如范围请求、差异编码、摘要以及分块编码等。
本章涵盖了下列内容。
作为 HTTP 数据的容器,HTTP 报文实体有哪些格式和行为。
HTTP 如何描述实体的主体大小,HTTP 为确定大小制定了哪些规则。
为了使客户端正确处理内容,使用了哪些实体首部来描述内容的格式、字母和语言。
可逆的内容编码,发送方可以在发送之前用它来转换内容的数据格式,使其占用更小的空间,或者更安全。
传输编码和分块编码。传输编码可以改变 HTTP 传输数据的方式,以改善某些类型内容的通信能力。分块编码是一种特殊的传输编码,它把数据切分为若干块,这样可以更可靠地传输长度未知的内容。
标记、标签、时间以及校验和等一整套机制,帮助客户端获取所请求内容的最新版本。
可用作内容版本号的验证码,网站应用可以通过它确保接收最新的内容。还有设计用来控制对象新鲜度的各种 HTTP 首部字段。
范围,在恢复中断的传输方面很有用。
HTTP 差异编码扩展,它使客户端只需要请求网页中和前一次相比有改变的部分。
实体主体的校验和,可以用来检测经过若干代理之后,实体的内容是否发生了改变。