我们在使用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首先要检查它是不是很麻烦。
答案 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标头的值。