0

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

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标准是否要求对用户刷新发起的请求进行这种“特殊处理”(如果是的话,谷歌浏览器中“硬重新加载(Ctrl+Shitf+F5)”的目的是什么),还是有其他解释?

4

1 回答 1

2

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

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

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

于 2012-12-06T13:31:39.020 回答