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

sea*_*ean 41 caching google-chrome no-cache

我们在使用Chrome缓存Glassfish服务器上的资源时出现问题.即使存在Last-Modified标头,Chrome也不会发送过期和无缓存标头,并且资源(大约4 MB SWF文件)正在被缓存.

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

谷歌自己的网站声明如下:

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

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

Jon*_*Jon 12

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

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

有关Chrome(和其他浏览器)如何计算该值的详细信息,请参阅源代码(Chrome v49中的示例).看起来Chrome还会计算相对于Last-Modified标头的值.

(感谢这篇文章)


Zac*_*ber 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

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

  • 单位"300"是一天?小时 ?秒? (5认同)
  • 我已经看到缺少缓存标头的资源会在Chromes磁盘缓存中缓存数周. (5认同)