HTTP 服务器使用内容协商来提供基于客户端的 Accept-Encoding
header 的身份编码或 gzip 编码的单个 URL。
现在假设我们在客户端和 httpd 之间有一个类似 squid 的代理缓存。
如果代理缓存了 URL 的两种编码,它如何确定要提供哪个?
非 gzip 实例(最初不使用 Vary
)可以提供给任何客户端,但编码实例(具有 Vary:Accept-Encoding
)只能使用与原始请求中使用的相同的 Accept-Encoding
header 值发送给客户端。
例如Opera 发送 "deflate, gzip, x-gzip, identity, *;q=0"
但 IE8 发送 "gzip, deflate"
。根据规范,缓存不应在两个浏览器之间共享内容编码的缓存。这是真的吗?
最佳答案
首先,恕我直言,当实体确实因该 header (或它的缺失)而变化时,不发送“Vary: Accept-Encoding”是不正确的。
话虽这么说,规范目前确实不允许为 Opera 提供缓存响应,因为 Vary header 与 HTTPbis, Part 6, Section 2.6 中的定义不匹配。 .也许这是我们应该放宽缓存要求的地方(您可能想跟进 IETF HTTP mailing list ...
更新:原来这已经被标记为一个 Unresolved 问题;我刚刚在我们的问题跟踪器中为此添加了一个问题,请参阅 Issue 147 .
关于http - HTTP 代理缓存如何决定服务身份编码资源还是 gzip 编码资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/694918/