为什么谷歌的PageSpeed要求即使指定的ETag当缓存头被设置(Why does google

2019-09-18 18:39发布

我已经设置缓存头是远在将来(从现在起1年)和已禁用由YSlow的建议(在ETag的http://developer.yahoo.com/performance/rules.html#etags ),但谷歌的PageSpeed似乎需要的ETag(或上次修改)缓存标头设置后还是一样。

“指定过期或缓存控制最大年龄的一个,和Last-Modified或ETag之一,对于所有可缓存资源是非常重要的。”

这两个规则似乎是矛盾的对方。

Answer 1:

YSlow的不建议删除一般,但对于某些环境ETag的。 当不使用ETag的,那么你应该使用Last-Modified代替。

ETagLast-Modified是在重新请求已经被缓存,也许过期资源 条件GET-请求

Cache-Control max-age是定义一个缓存项有多长 ,而无需再次询问有效的肯定。 (在此规则到期,则该浏览器将有条件的GET ...)

所以你的情况:

  • 浏览器缓存资源为一年。 当年在这个资源没有请求在全部完成。 它是直接从本地缓存中。 (使用Cache-Control报头的设置。)
  • 浏览器条件请求在一年后到期,以检查是否事情发生了转变。 服务器响应HTTP 304时没有发生任何变化和空体。 浏览器将继续使用它的缓存项在这种情况下,无需重传。 (使用ETag和/或Last-Modified头设定)

(浏览器可能会或可能不会尊重你的数据。例如,它可能是一个浏览器会做,即使当一个人一年尚未过期的有条件申请。)

对于高度优化的网站的Cache-Control是更为重要的,因为你把它faaaar将来到期头和简单地改变URL在情况下,它改变了资源。 虽然这可以防止使用条件要求的它为您提供了定义,同时能够在同一时间立刻服务资源的新版本给大家expires头时要激进的极端的能力。 这是因为新的URL它似乎是在浏览器视图新的资源。

对于Java存在一个框架调用jawr这使得使用这些和其他概念,而无需你的网站发展的负面影响。



Answer 2:

ETagCache-Control头是不是排他性的。 究其原因,你链接到页面建议删除的ETag是减少HTTP标头..这将在最好的为您节省几个字节的大小。 下面是一个使用情况下,为什么仍然是很有意义的两个:

  • 您提供application.js了一个星期到期日,以及ETAG指纹
  • 周通,用户回来到您的网站:文件已过期,并在浏览器调度条件请求,如果文件没有被修改,浏览器可以决定跳过请求文件完全。 (上次修改的作品太)

如果你不提供ETagLast-Modified浏览器请求并下载整个文件。

好相关的资源: https://developers.google.com/speed/articles/caching



文章来源: Why does google pagespeed asks to specify ETag even when cache headers are set