Tag: 传输编码

传输编码:gzip与内容编码:gzip

目前的情况是什么呢? Transfer-Encoding: gzip 或者一个 Content-Encoding: gzip 当我想让有限的带宽的客户 表示愿意接受压缩的响应时 , 服务器最终决定是否压缩 。 后者是什么,如Apache的mod_deflate和IIS做的,如果你让它照顾压缩。 根据要压缩内容的大小,它将执行额外的Transfer-Encoding: chunked 。 它还将包括一个Vary: Accept-Encoding ,这已经暗示了这个问题。 Content-Encoding似乎是实体的一部分,所以改变Content-Encoding等于实体的变化,即不同的Accept-Encoding头意味着例如caching不能使用其它相同实体的caching版本。 有没有一个明确的答案,我已经错过了(这不是在一个apache新闻组的长线程中消息内)? 我目前的印象是: 实际上,Transfer-Encoding是通过现有的服务器和客户端实现进行Content-Encoding的主要方式 内容编码由于其语义含义而带有一些问题(当透明地压缩响应时,服务器应该如何处理ETag )? 原因是chicken'n'egg:浏览器不支持它,因为服务器不是因为浏览器不支持 所以我假设正确的方式将是一个Transfer-Encoding: gzip (或者,如果我额外的块体,它将成为 Transfer-Encoding: gzip, chunked )。 在这种情况下没有任何理由碰Vary或ETag或任何其他头,因为它是一个运输级别的东西。 目前我并不太在意Transfer-Encoding的“逐跳”特性,这是别人似乎首先关心的,因为代理可能会解压缩并将未压缩的内容转发给客户端。 然而,如果原始请求具有正确的Accept-Encoding头,那么代理可能就像原来那样(压缩),在我知道的所有浏览器都是给定的情况下。 顺便说一句,这个问题至less有十年历史,请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=68517 。 任何澄清这一点将不胜感激。 无论是在什么被认为是符合标准的和什么被认为是实际的。 例如,仅支持透明“内容编码”的HTTP客户端库将成为违背实用性的论点。