http - HTTP 代理缓存如何决定服务身份编码资源还是 gzip 编码资源?

标签 http caching proxy reverse-proxy content-encoding

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/

相关文章:

java - 对 URL 上的 GET 参数进行编码

http - HTTP协议(protocol)使用哪种编码?

javascript - 本地开发期间的浏览器缓存管理

Django - 基于变量使 Django 模板缓存过期

linux - 如何让 Sublime Text 2 包管理器使用我的代理?

apache - https 的 ProxyPass 不起作用

nginx - 使用 NGINX auth_request 和 oauth2_proxy 设置 header

python - Django 测试 - 如何使用 JSON 发送 HTTP Post Multipart

java - 有没有办法在 HttpClient java 中处理 HTTP/2 Goaway 收到的 IOException?

mysql - 大 MySQL 表