如果未设置过期和/或无缓存标头,Google Chrome会缓存资源多长时间?

时间:2012-03-16 16:17:18

标签: google-chrome caching no-cache

我们在使用Chrome缓存Glassfish服务器上的资源时出现问题。尽管存在Last-Modified标头,但仍未发送过期和无缓存标头,并且Chrome正在缓存资源(大约4 MB SWF文件)。

有时Chrome会获得304代码,而有时则只需200(来自缓存)。我了解304 - Chrome可能会使用缓存版本来确定最近的Last-Modified日期。但有时它会执行200(来自缓存),它不返回任何标题信息,并且看起来Chrome只是假设文件未被修改而不是检查。

Google's own site states以下内容:

  

HTTP / S支持浏览器对静态资源的本地缓存。一些   最新的浏览器(例如IE 7,Chrome)使用启发式方法来决定   缓存所有没有显式缓存的资源的时间   头。

但这并没有提供明确的答案。这个启发式发布在任何地方吗?我意识到可能没有一个固定的答案(如30天),但一些通用指南会很有用。此外,如果设置了Last-Modified,我不明白为什么Chrome首先要检查它是不是很麻烦。

2 个答案:

答案 0 :(得分:11)

DEFAULT_CACHE_TIME = 300

我通过在http://code.google.com/p/chromium/source/search?q=DEFAULT_CACHE_TIME&origq=DEFAULT_CACHE_TIME&btnG=Search+Trunk搜索“DEFAULT_CACHE_TIME”找到了上述内容。

有一个名为“chromeextensionsdocs.py”的文件,其中包含DEFAULT_CACHE_TIME。

相信这是基于http://code.google.com/appengine/docs/python/memcache/overview.html所给出的例子的秒数 在“chromeextensionsdocs.py”中,DEFAULT_CACHE_TIME作为memcache.add

中的最后一个参数发送

我不完全确定这是否是正确的值,但似乎很可能是将这些碎片组合在一起。

答案 1 :(得分:8)

浏览器认为缓存响应新鲜的时间通常与上次修改后的时间相关:

  

由于源服务器并不总是提供明确的到期时间,因此缓存可以在未指定显式时间时指定启发式到期时间,使用使用其他头字段值的算法(例如Last-Modified时间)...如果响应具有Last-Modified头字段([RFC7232]的第2.2节),则鼓励缓存使用启发式到期值,该值不超过自该时间以来间隔的某个部分。此分数的典型设置可能是10%。 [https://tools.ietf.org/html/rfc7234#section-4.2.2]

Chrome(和其他浏览器)如何计算该值的详细信息可在源代码(An example from Chrome v49)中找到。看起来Chrome还会计算相对于Last-Modified标头的值。

Credit to this post