对于网页浏览器中哪些动作F5和Ctrl+F5触发,是否有一个标准?
我曾经在IE6和Firefox 2.x中做过实验。F5刷新会触发发送到服务器的HTTP请求,并带有If-Modified-Since
头,而Ctrl + F5则不会有这样的头。在我的理解中,F5会尽量利用缓存的内容,而Ctrl + F5则是为了放弃所有的缓存内容,只是重新从服务器上检索所有的内容。
但今天,我注意到在一些最新的浏览器(Chrome、IE8)中,它不再以这种方式工作了。在F5和Ctrl+F5中都会发送 "If-Modified-Since "头。
那么,这应该如何运作,或者(如果没有标准)主要的浏览器在实现这些刷新功能方面有什么不同?
这取决于浏览器,但它们的行为方式是相似的。
我已经测试了FF、IE7、Opera和Chrome。
F5通常只在页面被修改时才更新。浏览器通常会尽量使用所有类型的缓存,并在请求中添加一个"If-modified-since"头。Opera则不同,它发送一个"Cache-Control: no-cache"。
CTRL-F5被用来强制更新,不考虑任何缓存。IE7添加了一个"Cache-Control: no-cache",FF也是如此,它也添加了"Pragma: no-cache" 。Chrome做了一个正常的"If-modified-since",Opera忽略了这个键。
如果我没记错的话,Netscape是第一个通过添加"Pragma:No-cache",当你按下CTRL-F5。
编辑:更新表
下面的表格更新了关于点击浏览器的刷新按钮(在Joel Coehoorn的请求之后),以及"max-age=0" Cache-control-header时将会发生什么的信息。
更新表,2010年9月27日
┌────────────┬───────────────────────────────────────────────┐
│ UPDATED │ Firefox 3.x │
│27 SEP 2010 │ ┌────────────────────────────────────────────┤
│ │ │ MSIE 8, 7 │
│ Version 3 │ │ ┌─────────────────────────────────────────┤
│ │ │ │ Chrome 6.0 │
│ │ │ │ ┌──────────────────────────────────────┤
│ │ │ │ │ Chrome 1.0 │
│ │ │ │ │ ┌───────────────────────────────────┤
│ │ │ │ │ │ Opera 10, 9 │
│ │ │ │ │ │ ┌────────────────────────────────┤
│ │ │ │ │ │ │ │
├────────────┼──┼──┼──┼──┼──┼────────────────────────────────┤
│ F5│IM│I │IM│IM│C │ │
│ SHIFT-F5│- │- │CP│IM│- │ Legend: │
│ CTRL-F5│CP│C │CP│IM│- │ I = "If-Modified-Since" │
│ ALT-F5│- │- │- │- │*2│ P = "Pragma: No-cache" │
│ ALTGR-F5│- │I │- │- │- │ C = "Cache-Control: no-cache" │
├────────────┼──┼──┼──┼──┼──┤ M = "Cache-Control: max-age=0" │
│ CTRL-R│IM│I │IM│IM│C │ - = ignored │
│CTRL-SHIFT-R│CP│- │CP│- │- │ │
├────────────┼──┼──┼──┼──┼──┤ │
│ Click│IM│I │IM│IM│C │ With 'click' I refer to a │
│ Shift-Click│CP│I │CP│IM│C │ mouse click on the browsers │
│ Ctrl-Click│*1│C │CP│IM│C │ refresh-icon. │
│ Alt-Click│IM│I │IM│IM│C │ │
│ AltGr-Click│IM│I │- │IM│- │ │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘
已测试的版本。
注意事项。
1.3.0.6版本发送I和C,但3.1.6版本在一个新标签页中打开页面。 只用"I"做一个正常的请求。
2.10.62版什么都不做。9.61可能会做C,除非是我的老表打错了。
关于Chrome 6.0.472的注意事项。如果你做一个强制重载(比如CTRL-F5),它的行为就像网址被内部标记为总是做一个强制重载。如果你进入地址栏并按下回车键,该标志就会被清除。
一般说来。
F5可能会给你相同的页面,即使内容已经改变,因为它可能从缓存中加载页面。但是Ctrl-F5会强制刷新缓存,并保证如果内容被改变,你会得到新的内容。
我已经实现了跨浏览器兼容的页面来测试[浏览器的刷新行为]1,得到的结果与@some类似,但适用于现代浏览器。
![在此输入图片描述][3] 。
[1]: https://web.archive.org/web/20130111203313/http://podlipensky.com/2012/03/behind-refresh-button/ [2]: https://github.com/podlipensky/RefreshButton/ [3]: http://i.stack.imgur.com/vDrr1.png
IE7/8/9似乎根据页面是否有焦点而表现不同。
如果你点击页面并CTRL+F5</kbd>。 然后"Cache-Control: no-cache".F5+F5那么"Cache-Control: no-cache" 被包含在请求头中。 如果你在位置/地址栏中点击,然后按CTRL+F5</kbd>。 它不是'。