Chrome 中的“Normal Reload”、“Hard Reload”和“Empty Cache and Hard Reload”有啥区别?

Posted

技术标签:

【中文标题】Chrome 中的“Normal Reload”、“Hard Reload”和“Empty Cache and Hard Reload”有啥区别?【英文标题】:What's the difference between "Normal Reload", "Hard Reload", and "Empty Cache and Hard Reload" in Chrome?Chrome 中的“Normal Reload”、“Hard Reload”和“Empty Cache and Hard Reload”有什么区别? 【发布时间】:2013-02-04 19:58:34 【问题描述】:

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

我可以弄清楚选项 1 和选项 3 之间的区别,选项 2 可能介于两者之间,但我无法在任何地方找到更准确的信息。

有人知道这 3 个选项的具体行为吗?

【问题讨论】:

你能解释一下“这个功能”吗?具体来说:您如何访问它?我尝试了各种右键单击,控制单击,......但无法获得它。这是什么版本? @JoachimSauer 哈哈,这是我的小秘密……说真的,它隐藏得非常好:您必须按下刷新按钮而不立即释放它在开发人员控制台处于活动状态时 @987654321 @ 也可以通过右键单击重新加载图标出现(在 Devtools 打开时) 这适用于 OSX Chrome 吗?我似乎无法通过开发工具打开它并右键单击/单击 + 按住 我在 2016 年偶然发现了这些功能... 【参考方案1】:

正常重载

与按 F5 相同。这将使用缓存,但在页面加载期间重新验证所有内容,寻找“304 Not Modified”响应。如果浏览器可以避免重新下载缓存的 javascript 文件、图像、文本文件等,那么它会。


硬重新加载

发出请求时不要使用缓存中的任何内容。 (等于 SHIFT+F5 无需打开开发者控制台)强制浏览器重新下载每个 JavaScript 文件、图像、文本文件等。


清空缓存和硬重载

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


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

【讨论】:

有谁知道第三个选项是否只是清空当前站点的缓存,还是清空整个缓存? @Grinn:实际上,现在我想起来,它可能是整个缓存。该功能的重点是清除事后下载,而不仅限于一个“站点”。 我不清楚什么是"after-the-fact download via Javascript"?谁能提供一个具体的例子? @Costa 您可以下载最初未在 DOM 中指定的内容。例如,通过向 DOM 添加新的 需要注意的是,这个只有在开发者工具打开的情况下才有效(F12)工具是否打开。【参考方案2】:

这也适用于 Mac OS X。打开开发者工具,然后在重新加载按钮上, 1. 二次点击(右击鼠标),或 2.长按,又名长按 查看菜单。

除了this answer,硬重载通常会导致代理、内容交付网络和其他远程缓存被刷新。

【讨论】:

“硬重载经常会导致代理、内容交付网络和其他远程缓存被刷新。” → 你能备份吗?你有任何引文解释为什么会这样吗?我希望 Hard Reload 只会重新加载所有本地缓存​​,并且不会对远程服务器产生额外影响。 我认为浏览器会发送一个Cache-Control: no-cache 标头。 squid-web-proxy-cache.1019090.n4.nabble.com/…是你的吗? 我做了一些测试...转到 URL 或使用 Normal Reload 发送了 3 个与缓存相关的标头:Cache-Control: max-age=0If-Modified-SinceIf-None-Match。然而,在执行Hard Reload(清空缓存或不清空缓存)时,只发送了两个缓存相关的标头:Cache-Control: no-cachePragma: no-cache。所以,是的,浏览器确实发送了一个标头,要求服务器提供新版本;然后由服务器(包括代理)根据它来改变行为。 太棒了!您可以将其编辑到我的答案中,或编写您自己的答案。 @DenilsonSáMaia【参考方案3】:

下面的方法让你只为有问题的 URL 清除缓存。当我被 http 到 https 重定向缓存卡住时,它帮助了我。

    打开 Chrome 开发者工具,在 Windows 中我使用F12 在重定向前检查Preserve log保存日志 右键单击重定向的 URL 和 Clear browser cache

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

【讨论】:

【参考方案4】:

这是对规范的引用 - 当触发重新加载时,浏览器会执行以下操作之一:

“正常重新加载”执行“特定的端到端重新验证”或“未指定的端到端重新验证”,如 HTTP spec 定义的那样,即使用缓存,但会发生重新验证,或者使用缓存验证条件(“特定”)或无(“未指定”)。在这两种情况下,都会发生重新验证,因为max-age 标头被浏览器设置为 0。

另一方面,“硬重新加载”似乎会触发“端到端重新加载” - 不允许使用缓存副本。在这种情况下,浏览器设置Pragma: no-cache会强制重新加载。

【讨论】:

以上是关于Chrome 中的“Normal Reload”、“Hard Reload”和“Empty Cache and Hard Reload”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载

chrome中的Chrome css3混合混合模式错误

怎样使chrome开发者工具中的response显示成json格式

Chrome 中的本机延迟加载

Chrome 调试器分析器中的“(程序)”是啥?

Chrome 中的 $ 变量(美元符号)?