浏览器的“ F5”和“ Ctrl + F5”刷新会产生什么请求?


394

Web浏览器中的动作F5Ctrl + F5触发是否有标准?

我曾经在IE6和Firefox 2.x中进行过实验。的F5 刷新将触发发送到服务器与HTTP请求If-Modified-Since报头,而Ctrl + F5不会具有这样的标题。以我的理解,F5 它将尝试尽可能多地利用缓存的内容,同时Ctrl + F5 旨在放弃所有缓存的内容,而只是再次从服务器检索所有内容。

但是今天,我注意到在某些最新的浏览器(Chrome,IE8)中,这种方式不再起作用。双方F5Ctrl + F5发送If-Modified-Since头。

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


10
FWIW:而这肯定是一个超级用户的话题,甚至有可能是打算作为有些最终用户为中心时最初问,在这一点上已经都回答程序员和Web开发人员参考和可能应该离开这里。SU已经有其他几个这样的,更面向最终用户的版本,并且不需要它……
Shog9 2010年

Answers:


313

一般来说:

F5即使更改了内容,也可能会给您相同的页面,因为它可能会从缓存中加载页面。但是Ctrl- F5强制刷新缓存,并保证如果更改了内容,则将获取新内容。


86
Thi是准确的,但是请注意,虽然Ctrl + F5会导致浏览器丢弃缓存并向服务器请求新的缓存,但服务器可能会忽略非缓存头,并为服务器端缓存的页面提供服务。因此,如果服务器忽略无缓存头,则即使Ctrl + F5也会返回该页面的旧版本。
AaronLS

F5将刷新页面-CTRL + F5将执行“硬”刷新。
Dimitri Dewaele 2015年

还要提及,Ctrl-F5将提交一个表单(如果提供)。
jabo

好的,所以如果您按ctrl + f5键,则告诉浏览器不要使用其缓存,但是在随后对同一页面的请求中会发生什么呢?我的意思是,看到最旧的页面后,您可以看到页面的旧版本吗?如果我由于缓存而看到页面的第1版,但是已经有第2版可用,我知道按ctrl + f5将使我看到第2版。然后关闭浏览器并再次打开该页面,我看到版本1还是仍然看到版本2?谢谢。
痣19年

525

这取决于浏览器,但是它们的行为类似。

我已经测试了FF,IE7,Opera和Chrome。

F5通常仅在页面被修改的情况下更新页面。浏览器通常尝试尽可能多地使用所有类型的缓存,并在请求中添加“ If-modified-since”标头。Opera通过发送“缓存控件:无缓存”来进行区别。

CTRL- F5用于强制更新,而不考虑任何缓存。IE7和FF一样,添加了“ Cache-Control:no-cache”,后者还添加了“ Pragma:no-cache”。Chrome会执行正常的“ If-modified-since”,而Opera会忽略该键。

如果我没有记错的话,那是Netscape,它是第一个通过按CTRL- 来添加“ Pragma:No-cache”来增加对缓存控制的支持的浏览器F5

编辑:更新表

下表更新了有关单击浏览器的刷新按钮(在Joel Coehoorn请求之后)和“ max-age = 0”高速缓存控制标头的信息。

更新后的表格,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)

笔记:

  1. 版本3.0.6发送I和C,但版本3.1.6在新选项卡中打开页面,仅使用“ I”发出普通请求。

  2. 版本10.62不执行任何操作。除非它是我的旧表中的错字,否则9.61可能会执行C。

关于Chrome 6.0.472的注意事项:如果您执行强制重新加载(如CTRL- F5),则其行为就像内部标记了url始终执行强制重新加载一样。如果转到地址栏并按Enter,则清除该标志。


5
@Joel Coehoorn:单击刷新按钮更新了表。喜欢ASCII图形表,不是吗?颜色编码只是代码颜色编码的副作用。
一些

11
您不能将其作为正确的HTML表格吗?
约翰·托普利

13
仅供参考-在chrome开发/错误跟踪板上,实际上已经引用了此答案:code.google.com/p/chromium/issues/detail?id=1906
Kip,2010年

18
@John Topley:不允许有桌子,所以答案是否定的。
一些

1
这张桌子上的出色作品-这属于quirksmode。+1。我想知道用于刷新页面中的资源(例如图像,样式表等)的标头中是否也存在变化?
James Hart

68

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

在此处输入图片说明


您页面上的链接已损坏,我在答案上固定了链接,但该页面上的许多链接已损坏。podlipensky.com/examples/refreshbutton/index.htmlpodlipensky.com/post/2012/02/27/...
胡安·门德斯

抱歉,关于此-做博客迁移。链接将尽快修复-请转到github存储库并下载示例。
Pavel Podlipensky 2012年

链接仍然断开。迁移还没有完成?
2015年

您能否使用当前版本的浏览器(尤其是移动和桌面Safari,@ PavelPodlipensky)更新您的答案?
格雷格·杜比奇

9

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

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


3

IE7 / 8/9的行为似乎有所不同,具体取决于页面是否具有焦点。

如果单击页面上的CTRL+,F5则请求标题中将包含“ Cache-Control:no-cache”。如果单击“位置/地址”栏中的,则按CTRL+ F5,而不是。


1

当用户按下(F5尽管新请求转到Web服务器并获得请求的响应)时。但是,当解析响应标头时,它会在浏览器缓存中检查所需的信息。如果缓存中的所需信息尚未过期,则将从缓存本身中还原该信息。

当用户单击时CTRL- F5即使这样,新请求也会转到Web服务器并获得响应。但是这一次,当解析响应标头时,它不会检查高速缓存中的任何必需信息,而仅将所有更新的信息带到服务器中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.