在印象中,浏览器中的F5和刷新按钮是同样的效果,都是对当前页面进行刷新;Ctrl-F5的行为也是刷新页面,可是会清除浏览器缓存,这在前端调试时候会经常使用。两者真正的区别是什么呢?在stackoverflow上有人给出了很详细的解释,整理以下。前端
在不一样的浏览器中F5和CTRL-F5的行为是不同的,可是他们的主要行为仍是很是类似的,如下结果是在FF,IE,Opera和Chrome中进行过测试得出。浏览器
当刷新一个页面的时候,浏览器会尝试使用各类类型的缓存,而且会发送If-Modified-Since
头到服务器,若是服务器返回304 Not Modified
,那么浏览器会使用本地的缓存;若是服务器返回200 OK
和资源内容,那么浏览器会使用返回的资源内容,并把资源内容进行缓存,待下次使用。缓存
MSIE会发送Cache-Control: no-cache
头,Firefox和Chrome除了发送Cache-Control: no-cache
头以外,还会发送Pragma: no-cache
头。Opera比较另类,不发送任何和缓存相关的头。服务器
如下表格很直观的代表了F5和CTRL-F5的行为,因为原文中测试的浏览器版本较低,因此进行了更新。测试
Updated table, 27 September 2010调试
+------------+-----------------------------------------------+ | 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|- | | +------------+--+--+--+--+--+--------------------------------+
Versions tested:code
HTTP/1.1规范14.9.4中规定:ci
End-to-end reload(即CTRL-F5强制刷新)会发送以下HTTP头:
Cache-Control: no-cache
Pragma: no-cache资源
Specific end-to-end revalidation(即F5 刷新)会发送以下HTTP头:
Cache-Control: max-age=0
If-Modified-Since: Fri, 15 Apr 2011 12:08:21 GMTget