当谈到是否这样做时,目前的情况是什么
Transfer-Encoding: gzip
或者
Content-Encoding: gzip
当我想允许 客户与例如有限的带宽到 表明他们愿意接受压缩回应和 服务器对是否压缩有最终决定权。
后者就是 Apache 的 mod _ flate 和 IIS 所做的,如果你让它负责压缩的话。根据要压缩的内容的大小,它将执行额外的 Transfer-Encoding: chunked
。
它还将包括一个 Vary: Accept-Encoding
,这已经暗示了问题。Content-Encoding
似乎是实体的一部分,因此更改 Content-Encoding
等于更改实体,即不同的 Accept-Encoding
头意味着缓存不能使用其缓存版本的其他相同的实体。
对于这个问题,我是否遗漏了一个明确的答案(而且这个答案没有隐藏在某个 apache 新闻组的长线程中的消息中) ?
我现在的印象是:
ETag
做什么?)因此,我假设正确的方式是 Transfer-Encoding: gzip
(或者,如果我额外组块的身体,它 会变成 Transfer-Encoding: gzip, chunked
)。在这种情况下,没有理由触摸 Vary
或 ETag
或任何其他头部,因为它是一个传输级别的东西。
目前,我不太关心 Transfer-Encoding
的“一跳一跳”,其他人似乎首先关心的是这个问题,因为代理可能会解压缩并向客户端转发。但是,如果原始请求具有适当的 Accept-Encoding
头文件,那么代理也可以将其转发为-is (压缩) ,在我所知道的所有浏览器中,Accept-Encoding
头文件都是给定的。
顺便说一下,这个问题至少有十年的历史了。 Https://bugzilla.mozilla.org/show_bug.cgi?id=68517.
如能对此作出澄清,我们将不胜感激。无论是从符合标准的角度还是从实用的角度来看。例如,HTTP 客户端库只支持透明的“内容编码”将是一个反对实用性的理由。