- 前一节讨论的内容编码,是对报文的主体进行的可逆变换。内容编码是和内容的具体格式细节紧密相关的。例如,你可能会用 gzip 压缩文本文件,但不是 JPEG 文件,因为 JPEG 这类东西用 gzip 压缩的不够好。
- 本节讨论传输编码。传输编码也是作用在实体主体上的可逆变换,但使用它们是由于架构方面的原因,同内容的格式无关。使用传输编码是为了改变报文中的数据在网络上传输的方式。
1. 可靠传输
- 长久以来,在其他一些协议中会用传输编码来保证报文经过网络时能得到“可靠传输”。在 HTTP 协议中,可靠传输关注的焦点有所不同,因为底层的传输设施已经标准化并且容错性更好。在 HTTP 中,只有少数一些情况下,所传输的报文主体可能会引发问题。其中两种情况如下所述:
- 未知的尺寸
如果不先生成内容,某些网关应用程序和内容编码器就无法确定报文主体的最终 大小。通常,这些服务器希望在知道大小之前就开始传输数据。因为 HTTP 协议要求 Content-Length 首部必须在数据之前,有些服务器就使用传输编码来发送数据,并用特别的结束脚注表明数据结束。(尽管可以因陋就简地用关闭连接作为报文结束的信号,但这种方法不能用于持久连接) - 安全性
你可以用传输编码来把报文内容扰乱,然
- 未知的尺寸