Web浏览器中的操作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?- ? ? ??????????????????????????????????????????????????????????????
测试版本:
Firefox 3.1.6和3.0.6(WINXP)
MSIE 8.0.6001和7.0.5730.11(WINXP)
Chrome 6.0.472.63和1.0.151.48(WINXP)
Opera 10.62和9.61(WINXP)
笔记:
版本3.0.6发送I和C,但3.1.6在新选项卡中打开页面,仅使用"I"发出正常请求.
版本10.62什么都不做.9.61可能会做C,除非它是我旧桌子上的拼写错误.
关于Chrome 6.0.472的注意事项:如果您执行强制重新加载(例如CTRL- F5),它的行为类似于内部标记的url始终执行强制重新加载.如果您转到地址栏并按Enter键,该标志将被清除.
一般来说:
F5即使内容被更改,也可能会为您提供相同的页面,因为它可能会从缓存中加载页面.但是Ctrl- F5强制缓存刷新,并保证如果内容发生更改,您将获得新内容.
我已经实现了跨浏览器兼容的页面来测试浏览器的刷新行为并获得类似于@some的结果,但对于现代浏览器:
至少在Firefox(v3.5)中,缓存似乎被禁用而不是简单地清除.如果页面上有多个相同图像的实例,则会多次传输.对于img
随后通过Ajax/JavaScript添加的标记也是如此.
因此,如果您想知道为什么浏览器会在您的自动刷新Ajax网站上继续下载相同的小图标几百次,那是因为您最初使用CTRL- 来加载页面F5.