我已将缓存标头设置为将来(1年后),并按照YSlow(http://developer.yahoo.com/performance/rules.html#etags)的建议禁用了ETag,但Google pagespeed似乎甚至需要ETag(或最后修改)设置缓存标头后。
“为所有可缓存资源指定一个Expires或Cache-Control max-age,以及Last-Modified或ETag之一。”
这两条规则似乎相互冲突。
答案 0 :(得分:4)
YSlow建议不要删除ETag,但是对于某些环境。如果不使用ETag,则应使用Last-Modified
代替。
ETag
和Last-Modified
用于条件GET请求。
Cache-Control max-age
用于定义缓存商品的有效期,无需再次询问。 (当此规则到期时,浏览器将进行条件GET ...)
所以在你的情况下:
Cache-Control
标头设置。)HTTP 304
响应并清空。在这种情况下,浏览器继续使用其缓存项而无需重新传输。 (使用ETag
和/或Last-Modified
标头设置)(浏览器可能会也可能不会尊重您的数据。例如,即使一年尚未过期,浏览器也可能会执行条件请求。)
对于高度优化的网站,Cache-Control
更重要,因为您将其设置为faaaar future expire标头,只需更改资源的URL即可。虽然这可以防止使用条件请求,但是它可以在定义过期标头时能够极其激进,同时能够同时为每个人提供新版本的资源。这是因为新的URL似乎是浏览器视图中的新资源。
对于Java,存在一个名为jawr的框架,它使用这些和其他概念,而不会对您的网站开发产生负面影响。
答案 1 :(得分:0)
ETag
和Cache-Control
标题不是独占的。您链接的页面建议删除ETag的原因是减少HTTP标头的大小..这最多可以节省几个字节。这是一个用例,其中以及为什么仍然有意义:
application.js
提供了一周的到期日期和etag指纹如果您未提供ETag
或Last-Modified
,则浏览器有来请求并下载整个文件。
良好的相关资源:https://developers.google.com/speed/articles/caching