用户刷新页面时忽略HTTP缓存标头

时间:2012-12-06 13:20:14

标签: http caching browser-cache

我想要理解我注意到的一些奇怪的浏览器行为。我有一些页面(为了实验)我提供了标题,我认为这应该导致页面被缓存:

Cache-Control:max-age=3600
Content-Length:66
Content-Type:text/html
Date:Thu, 06 Dec 2012 13:08:01 GMT
Expires:Fri, 07 Dec 2012 14:19:41 GMT
Server:Apache-Coyote/1.1

正如所料,当我通过其他一个页面上的链接导航到其中一个页面时,浏览器直接从其缓存中提供页面,并且没有对服务器的调用。但是,当我通过按浏览器刷新按钮重新加载其中一个页面时,似乎忽略了与缓存相关的标题,并将请求发送到服务器。

我在最新版本的Chrome和Firefox以及IE9中看到了这种行为。

HTTP标准是否要求对用户刷新发起的请求进行“特殊处理”(如果是,那么Google Chrome中“硬重新加载(Ctrl + Shitf + F5)”的目的是什么),还是有一些其他解释?

1 个答案:

答案 0 :(得分:2)

通常,当您请求页面时,浏览器“应该”向服务器发送HEAD请求,要求(仅)您请求的文档的标题。如果您只在POST或GET请求期间设置上面的标题,它将解释为什么浏览器会将文档视为已过期并重新获取它。

但是,从另一个角度来看,由于使用刷新功能的主要原因是“刷新”页面,因此浏览器不提供缓存副本但执行您要求的操作= get最新版本,因为为什么还要点击刷新?

我可以确认一些浏览器(例如chrome)在刷新期间不会更新所有资源(例如链接的.js文件),但是它们会更新你刷新的页面!