cache-control
标头会怎样? HTTP是否指定客户端应遵循的默认行为还是由客户端决定?在Chrome中,我看到一些Javascript请求,其中没有
cache-control
标头显示为200 (from disk cache)
。 Chrome浏览器在优化吗?在IE中,我看到它显示为
304 (not modified)
。我如何更好地理解这一点?
#1 楼
如果没有Cache-Control
标头和Expires
标头,但是有Last-Modified
标头(大多数Web服务器默认为静态资产发送该标头),则大多数浏览器将使用启发式新鲜度来确定为该资产缓存多长时间。对此的典型计算(这是RFC 7234建议的计算方法)为:
(current time - last modified time) / 10
因此,例如,如果图像的最后修改时间表明该图像的最后修改时间是60天前,可能会决定它可以在检查新版本之前合理使用该映像的本地缓存版本6天。
请注意,在大多数情况下,如果单击“刷新”,则会告诉浏览器获取新版本,因此在这种情况下,此逻辑将不适用。
由实际浏览器确定的新鲜度:
Chrome仍使用旧的“自last_modified以来的10%的时间”,与RFC匹配建议
Safari也一样
Firefox现在使用
min(one week, (current time - last modified time) / 10)
。所以新鲜度不会超过一个星期评论
如果没有Last-Modified标头?
–bertonc96
20-4-6的14:42
这就是我一直在寻找的答案。但是,我很好奇各种浏览器的默认设置。
–aross
20-11-18在12:27
@ bertonc96在这种情况下似乎为0。例如参见此。
–aross
20-11-18在16:35
评论
“没有缓存头”意味着没有缓存控制头,或者实际上没有缓存头?缓存控制不是唯一影响缓存的标头。大多数Web服务器都会发送静态资产(例如Javascript文件)的Last Modified标头。