在Firefox中使用Ctrl + S保存网页是否会使浏览器再次加载该网站?


58

在Firefox中使用Ctrl+ 保存网站以供离线阅读时S,我注意到尽管网页已加载,但下载过程仍需花费几秒钟才能完成。

我想知道保存这样的网页是否会使Firefox第二次获取所有内容(HTML,图像,JavaScript,CSS等),还是仅从缓存中已加载的文件中获取它。


我记得,旧的Firefox重新加载了页面。答案是针对当前的Firefox。是几年以来的事了。
user259412 '18

您能否澄清一下所谓的“下载过程”?即使不应该从网络上重新下载内存中的资源,浏览器仍然需要导出文件夹中的所有数据并更改链接等。此外,如果存储磁盘被暂停,则可能需要花费一定的时间。有一段时间只是唤醒它,以便我们可以写它。但是,如果您谈论的是Library> Downloads面板花费时间并显示1.2Mbps的内容,则可能与这种回归有关,他们认为不是错误……
Kaiido

4
尽管其他用户已经做出了适当的回答,但请注意,除非在软件开发人员提供了行为保证的情况下,否则在任何软件上对此类行为进行分类通常都是徒劳的。因此,任何标记为正确的答案都应指向针对其进行测试的版本,而不是对所有未来版本和过去版本进行广泛假设。最好的答案已经解决了这个问题。我知道; 挑剔。
阿德南Y

尽管它看起来像是“ WTF”,但实际上它是十年左右的正常现象,而不仅仅是Firefox。不要问我为什么,这根本没有意义。
戴蒙

Answers:


68

不,它不会触发第二个请求。

我只是通过运行一个简单的HTTP服务器记录请求来测试它。保存网站时,服务器未收到第二个请求。

  • 已测试:Ubuntu 18.04上的Firefox 61.0.1(64位)
  • 服务器:python 2.7.15的SimpleHTTPServer模块(python -m SimpleHTTPServer 7070

编辑:

评论者询问服务器是否正在发送“无缓存”标头的不同行为。我用Pragma: No-Cache和进行了测试,Cache-Control: No-Cache结果保持不变。

我用来进行测试的代码(通过此答案):

#!/usr/bin/env python
import SimpleHTTPServer

class MyHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_my_headers()

        SimpleHTTPServer.SimpleHTTPRequestHandler.end_headers(self)

    def send_my_headers(self):
        self.send_header("Pragma", "No-Cache")
        self.send_header("Cache-Control", "No-Cache")


if __name__ == '__main__':
    SimpleHTTPServer.test(HandlerClass=MyHTTPRequestHandler)

11

不,不是。

通过断开计算机与Internet的连接,然后保存已经加载的网页,我刚刚测试了此代码,没有任何代码。

有效。您可以自己进行相同的测试。


可以肯定的是,如果计算机处于联机状态或脱机状态,则行为可能会有所不同,但是当前的最高答案显示了更深入的测试。我只是认为进行简单测试仍然很有价值。


11
Expires,Cache-control,Pragma和其他标头的组合如此之多,以至于“在这种情况下”肯定不是“从不”。不看源代码,我不会打赌。
Guntram Blohm

5
@GuntramBlohm,绝对正确。另一方面,如果简单测试失败,那么您可以明确地得出结论,即使不有时向服务器发送额外的请求,Ctrl-S也不会始终有效。因此,简单的测试仍然有价值。我很惊讶没有其他人提到它,所以我做到了。
通配符

8

保存网页(ctrls)是否会使Firefox第二次获取所有内容?

这是很容易使用Firefox的测试开发工具

  • 打开工具,然后单击“网络”选项卡。

  • 保存页面

您将看到没有生成额外的网络流量。


50
我怀疑在这种情况下我们是否可以依靠开发人员工具。它仅显示来自单个选项卡的流量,我认为下载不在该选项卡的上下文中运行。我认为,根据您的推理,在您尚未访问的链接的上下文菜单中使用“另存为”,应该会显示在“网络”标签中-但这不会。
kapex

@kapex理解。但是在这种情况下,除了在未访问的链接上另存为不是。
DavidPostill

5
@kapex我刚刚拔出了互联网连接,仍然能够正确保存页面……
DavidPostill

11
我并不怀疑它使用了缓存,我只是怀疑开发人员工具可以用来证明这一点。我希望“另存为”和“保存页面”的行为相同,但是当然可能会有差异。因此,这是另一个想法:如果我们在开发人员工具中禁用缓存,则使用ctrl + s肯定会显示在“网络”标签中,但同样不会。
kapex '18

1
您必须使用浏览器工具箱,该工具箱显示来自浏览器的所有网络请求,包括未绑定到特定页面的内部网络请求。
尼尔


1

可能吧。

CSS有一个@media选择器。它允许CSS根据用来显示页面的硬件类型使用不同的定义-打印机,不同尺寸的屏幕等。

CSS还可以直接请求图像文件(子弹头图像,背景图像)。

现在,如果Firefox在显示页面时仅下载当前硬件所需的内容,而在保存到磁盘时下载所有内容,那么您可能会有额外的请求。

警告:

这只是一个实用的答案的前半部分。下半年将测试这种情况。不幸的是,我没时间了,所以如果有人可以报告可重复的测试结果,我将接受任何编辑或评论。


不,所有CSS文件都已下载,只是未解析:)
Martijn
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.