YSlow 通常不建议删除 ETag,但对于某些环境。当不使用 ETags 时,你应该使用它Last-Modified
。
ETag
并且Last-Modified
用于重新请求已缓存且可能已过期的资源时的条件 GET-Requests。
Cache-Control max-age
用于确定缓存项目的有效期而无需再次询问。(当此规则过期时,浏览器将进行有条件的 GET ...)
所以在你的情况下:
- 浏览器将资源缓存一年。在那一年内,根本没有完成对这个资源的请求。它直接从本地缓存中提供。(使用
Cache-Control
标题设置。)
- 浏览器在一年过期后执行条件请求以检查是否有变化。当没有任何变化时,服务器会以
HTTP 304
空正文进行响应。在这种情况下,浏览器会继续使用其缓存项目,而无需重新传输。(使用ETag
和/或Last-Modified
标题设置)
(浏览器可能会也可能不会尊重您的数据。例如,即使一年尚未到期,浏览器也可能会发出有条件的请求。)
对于高度优化的站点,这Cache-Control
一点更为重要,因为您将其设置为 faaaar 未来过期标头,并且只需更改资源的 URL 以防它发生更改。虽然这可以防止使用条件请求,但它使您能够在定义 expires 标头时非常激进,同时能够立即为每个人提供新版本的资源。这是因为新 URL 似乎是浏览器视图中的新资源。
对于 Java,存在一个名为jawr的框架,它利用这些和其他概念,而不会对您的站点开发产生负面影响。