在web浏览器中,F5和Ctrl+F5会触发什么动作,是否有一个标准?

我曾经尝试过IE6和Firefox 2.x。F5刷新会触发一个带有If-Modified-Since标头的HTTP请求发送到服务器,而Ctrl+F5不会有这样的标头。在我的理解中,F5将尽可能地利用缓存的内容,而Ctrl+F5打算放弃所有缓存的内容,只是再次从服务器检索所有内容。

但是今天,我注意到一些最新的浏览器(Chrome, IE8)不再以这种方式工作了。F5和Ctrl+F5都发送If-Modified-Since标头。

那么,这应该是如何工作的,或者(如果没有标准的话)主要的浏览器在实现这些刷新功能方面有什么不同?


当前回答

一般来说:

F5可能会给你相同的页面,即使内容被改变,因为它可能会从缓存加载页面。但Ctrl+F5强制缓存刷新,并将确保如果内容发生更改,您将获得新内容。

其他回答

IE7/8/9似乎表现不同,取决于页面是否有焦点。

如果你点击页面并按CTRL+F5,那么“Cache-Control: no-cache”将包含在请求头中。如果你点击位置/地址栏,然后按CTRL+F5,它不是。

一般来说:

F5可能会给你相同的页面,即使内容被改变,因为它可能会从缓存加载页面。但Ctrl+F5强制缓存刷新,并将确保如果内容发生更改,您将获得新内容。

我已经实现了跨浏览器兼容的页面来测试浏览器的刷新行为(这里是源代码),并得到类似于@some的结果,但对于现代浏览器:

当用户按F5,虽然新的请求到web服务器,并获得响应的请求以及。但是当响应头被解析时,它会检查浏览器缓存中所需的信息。如果缓存中所需的信息没有过期,则从缓存本身恢复该信息。

当用户点击CTRL-F5甚至然后新的请求去web服务器并得到响应。但是这一次,当解析响应头时,它不会在缓存中检查任何必需的信息,只从服务器中带来所有更新的信息。

至少在Firefox (v3.5)中,缓存似乎是禁用的,而不是简单地清除。如果一个页面上有相同图像的多个实例,则该图像将被多次传输。随后通过Ajax/JavaScript添加的img标记也是如此。

因此,如果您想知道为什么浏览器总是在自动刷新Ajax站点上下载几百次相同的小图标,这是因为您最初使用CTRL-F5加载页面。