Chrome仍然会从缓存中加载文件,尽管“ETag”已更改,并且“Last-Modified”设置为比服务器缓存的资源更新的日期。为什么???
答案 0 :(得分:0)
最好始终在Cache-Control中设置Expires或max-age。如果未指定资源何时到期,则允许浏览器使用自己的启发式进行缓存。请参阅13.2.4 of RFC 2616部分:
如果没有Expires,Cache-Control:max-age或Cache-Control:s- maxage(参见第14.9.3节)出现在响应和响应中 不包括缓存的其他限制,缓存可以计算 使用启发式的新鲜度。缓存必须附加警告 113如果发出此类警告,年龄超过24小时的任何回复 尚未添加。
此外,如果响应确实具有Last-Modified时间,则启发式 到期值应该不超过间隔的某个部分 自那时以来。此分数的典型设置可能是10%。
确定响应是否已过期的计算是完全正确的 简单:
response_is_fresh = (freshness_lifetime > current_age)
Chrome已缓存资源,因为您尚未指出是否应缓存该资源。只有在浏览器确定资源可能过时后,浏览器才会使用Last-Modified来验证资源。
您需要设置Expires或Cache-Control以获得所需的缓存行为。
BTW,对于大多数网站来说,一个好的经验法则是立即使HTML过期,但永远缓存图像,CSS和JavaScript:http://blog.httpwatch.com/2007/12/10/two-simple-rules-for-http-caching/