在Chrome中,“正常刷新”、“强制刷新”和“清空缓存并强制刷新”有什么区别?

410
我最近在Chrome中发现了这个新功能:

reload options

我能够理解选项1和选项3之间的区别,而选项2可能是两者之间的某种折中,但我无法在任何地方找到更精确的信息。
有人知道这3个选项的具体行为吗?

20
你能解释一下“这个功能”吗?具体地说,如何访问它?我尝试了各种右键点击、控制点击等,但都无法获得它。这是哪个版本? - Joachim Sauer
98
@JoachimSauer 哈哈,这是我的小秘密...说真的,它被隐藏得非常好:你必须在开发者控制台处于活动状态时按住刷新按钮不立即释放*。http://www.samuelrossille.com/home/blog-chrome-reload-options.html - Samuel Rossille
16
同时也可以通过右键单击重新加载图标(在 Devtools 打开时)出现。 - Costa
7
这在OSX Chrome上可行吗?我似乎无法通过开发者工具和右击/点击+按住来打开它。 - nitsujri
6
我在2016年意外发现了这些功能... - Edwin Yip
显示剩余3条评论
4个回答

516

普通刷新

与按下F5键相同。在页面加载期间,此操作将使用缓存但重新验证所有内容,查找“304未修改”响应。如果浏览器可以避免重新下载缓存的JavaScript文件、图像、文本文件等,则会这样做。


强制刷新

发起请求时不使用缓存(即相当于按下SHIFT+F5,无需打开开发人员工具)。强制浏览器重新下载每个JavaScript文件、图像、文本文件等。


清空缓存并强制刷新

显然,如果缓存为空,则必须进行强制刷新。这将再次强制浏览器重新下载所有内容。但是,如果页面通过JavaScript进行了任何事后下载,而这些下载不属于页面加载的一部分,则可能仍然使用缓存,这就是清空缓存有用的地方,因为它确保了即使这些下载也不会使用缓存文件。


注意:此功能仅在开发人员工具打开时可用。


57
有人知道第三个选项只是清空当前网站的缓存,还是会清空整个缓存吗? - Grinn
16
@Grinn: 其实,现在我想想,可能是整个缓存需要清除。该功能的目的是清除事后下载的文件,这些文件并不局限于一个“站点”。 - Andrew Rasmussen
18
什么是通过JavaScript进行的“事后下载”?有人能提供一个具体的例子吗? - Costa
6
您可以下载未在DOM中初始指定的内容。例如,通过向DOM添加新的<script>标签或使用RequireJS等方式。任何基于AMD的库(如RequireJS)基本上都会惰性地加载其脚本。在这种情况下,您需要清空缓存以确保真正地进行硬性重新加载。 - Domi
17
需注意,此功能仅在开发者工具(F12)打开时才有效。若无论开不开发者工具都能一直使用此设置将会更好。 - scunliffe
显示剩余20条评论

5
这也适用于Mac OS X。打开开发者工具,然后在重新加载按钮上: 1. 次要点击(右键单击右手鼠标),或 2. 长按 即可查看菜单。
除了这个答案之外,硬重载通常会导致代理、内容交付网络和其他远程缓存被刷新。
图片链接:https://istack.dev59.com/5DM8B.webp

“强制刷新通常会导致代理、内容分发网络和其他远程缓存被刷新。”→ 你能支持一下吗?你有任何引用来解释为什么会出现这种情况吗?我原本认为强制刷新只会重新加载所有本地缓存,并不会对远程服务器产生额外的影响。 - Denilson Sá Maia
我认为浏览器会发送一个 Cache-Control: no-cache 头信息。http://squid-web-proxy-cache.1019090.n4.nabble.com/Force-cache-reload-for-object-from-browser-td1028329.html 你的浏览器也是这样吗? - dcorking
6
我进行了一些测试...访问URL或使用“普通刷新”会发送3个与缓存相关的头部信息:Cache-Control: max-age=0If-Modified-SinceIf-None-Match。然而,进行“强制刷新”(无论是否清空缓存),只会发送2个与缓存相关的头部信息:Cache-Control: no-cachePragma: no-cache。因此,是的,浏览器确实会发送一个请求头部信息,要求服务器提供新版本;之后服务器(包括代理)会根据这个请求改变其行为。 - Denilson Sá Maia
太好了!你可以将其编辑到我的答案中,或者写下你自己的答案。@DenilsonSáMaia - dcorking

1
以下方法只能让您清除有问题的URL的缓存。当我被卡在http到https重定向缓存时,这个方法帮了我大忙。
  1. 打开Chrome开发者工具,在Windows中使用
  2. 选中保留日志以在重定向前保存日志
  3. 右键单击重定向的URL并选择清除浏览器缓存

这将仅清除有问题的缓存,而不影响正常缓存。


1
这里有一个规范参考 - 当重新加载被触发时,浏览器执行以下操作之一:
“普通重新加载”执行“指定端到端重新验证”或“未指定端到端重新验证”中的一个,由HTTP规范定义,即使用缓存,但重新验证会发生,通过带有缓存验证条件(“特定”)或无条件(“未指定”)实现。在两种情况下,重新验证发生是因为浏览器将max-age标头设置为0。
另一方面,“硬重新加载”似乎会触发“端到端重新加载”-不允许使用任何缓存副本。在这种情况下,浏览器通过设置Pragma:no-cache来强制重新加载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接