【问题标题】:What does vary:accept-encoding mean?变化:接受编码是什么意思?
【发布时间】:2011-12-12 12:34:27
【问题描述】:

谷歌页面速度插件通知我:

The following publicly cacheable, compressible resources should have a "Vary: Accept-Encoding" header:
//some .js and .css files

我不明白这是什么意思。我已经像这样压缩了这些文件:

if (encodings.Contains("gzip") || encodings == "*")
{
    app.Response.Filter = new GZipStream(baseStream, CompressionMode.Compress);
    app.Response.AppendHeader("Content-Encoding", "gzip");
}

这一切似乎都奏效了。为什么需要Vary: Accept-Encoding

【问题讨论】:

    标签: c# asp.net http-headers


    【解决方案1】:

    变化:Accept-Encoding 通知服务器在缓存所请求资源的表示方面的行为。如果接收到对先前缓存的资源的新请求,它将从缓存中提供服务,除非新请求的 Accept-Encoding 标头与先前缓存的表示不同,此时该请求将被视为新请求并且不会从缓存中提供服务。

    ** 编辑 ** 正如花费者指出的那样 - 如果您从缓存中提供压缩文件并且客户端不接受您的压缩机制,他们将获得一页垃圾,所以是的,这是必要的。但是,您不一定会通过正常测试注意到差异。

    http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3

    【讨论】:

    • 绝对必要。如果 GZIPPED 版本在缓存中并且客户端不接受 GZIP,则它们将被提供 gobbledegook。
    • Nitpick:缓存可以存储多个回复,如果已经有匹配的缓存响应,则不需要将请求视为新请求。
    【解决方案2】:

    它允许缓存根据浏览器是否请求 GZIP 编码来提供不同的缓存版本的页面。如果指示的标头中有任何变化,则可变标头指示缓存存储页面的不同版本。

    就目前而言,缓存中将有一个(可能是压缩的)页面副本。假设它是压缩版本:如果有人请求资源但不支持 gzip 编码,则会为他们提供错误的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 2022-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多