代码之家  ›  专栏  ›  技术社区  ›  Steve Clay

HTTP代理缓存如何在服务标识和gzip编码资源之间做出决定?

  •  6
  • Steve Clay  · 技术社区  · 17 年前

    HTTP服务器使用内容协商服务于单个URL标识,或基于客户端的URL编码的gzip Accept-Encoding

    现在假设我们在客户端和httpd之间有一个类似squid的代理缓存。

    Vary )可以服务于任何客户端,但编码实例(具有 Vary: Accept-Encoding 接受编码 原始请求中使用的标头值。

    "deflate, gzip, x-gzip, identity, *;q=0" 但是IE8发送 "gzip, deflate" . 根据规范,缓存不应该在两个浏览器之间共享内容编码的缓存。这是真的吗?

    3 回复  |  直到 17 年前
        1
  •  8
  •   Julian Reschke    17 年前

    首先,当实体确实因标头(或其缺失)而发生变化时,不发送“Vary:Accept Encoding”是不正确的。

    这就是说,规范目前确实不允许向Opera提供缓存响应,因为Vary头与中的定义不匹配 HTTPbis, Part 6, Section 2.6 . 也许这是一个我们应该放宽缓存要求的领域(您可能希望跟进 IETF HTTP mailing list ...

    更新:原来这已经被标记为一个开放性问题;我刚刚在我们的问题跟踪程序中添加了一个问题,请参见 Issue 147

        2
  •  2
  •   Steve Clay    17 年前

    当然,朱利安是对的。教训: Vary: Accept-Encoding Accept-Encoding ,无论响应编码是什么。

    回答我的问题,如果你走错了 Vary 变化 ). Squid does this .

        3
  •  1
  •   Henrik Nordström    16 年前

    省略Vary的一个大问题是,如果缓存在没有Vary的情况下接收到编码的变体,那么它可能会发送该变体以响应其他请求,即使它们的接受编码表明客户端无法理解内容。

    推荐文章