Page 396 - HTTP权威指南
P. 396
15.6 传输编码和分块编码
前一节讨论的内容编码,是对报文的主体进行的可逆变换。内容编码是和内容的具
体格式细节紧密相关的。例如,你可能会用 gzip 压缩文本文件,但不是 JPEG 文
件,因为 JPEG 这类东西用 gzip 压缩的不够好。
本节讨论传输编码。传输编码也是作用在实体主体上的可逆变换,但使用它们是由
于架构方面的原因,同内容的格式无关。如图 15-5 所示,使用传输编码是为了改变
报文中的数据在网络上传输的方式。
经过内容编码的响应
HTTP/1.0 200 OK
Content-encoding: gzip 标准的首部块
Content-type: text/html
[...]
[encoded message] 标准的实体(只
是经过了编码) 经过内容编码的报文,只是对报文的实
体部分进行了编码。而对于经过传输编
码的报文来说,编码作用在整个报文上,
经过传输编码的响应
报文自身的结构发生了改变。
HTTP/1.1 200 OK
Transfer-encoding: chunked 基本的首部
10
abcdefghijk 经过编码的块
1
a
图 15-5 内容编码和传输编码的对比
15.6.1 可靠传输
长久以来,在其他一些协议中会用传输编码来保证报文经过网络时能得到“可靠传
输”。在 HTTP 协议中,可靠传输关注的焦点有所不同,因为底层的传输设施已经标
准化并且容错性更好。在 HTTP 中,只有少数一些情况下,所传输的报文主体可能
会引发问题。其中两种情况如下所述。
• 未知的尺寸
如果不先生成内容,某些网关应用程序和内容编码器就无法确定报文主体的最终
大小。通常,这些服务器希望在知道大小之前就开始传输数据。因为 HTTP 协议 354
要求 Content-Length 首部必须在数据之前,有些服务器就使用传输编码来发
实体和编码 | 371