网络服务器上的文件未在浏览器中更新-为什么?

网络服务器上的文件未在浏览器中更新-为什么?

我今天更新了 Sourceforge 上的一个项目网站,发现了一个非常奇怪的现象:

单击网络浏览器中的“重新加载”(Linux 下的 Waterfox 56.2.9)并未显示修改后的页面。

为了调试该问题,我上传了一个附加文件并在 Web 浏览器中打开它。成功了。然后我删除了服务器上的文件并单击“重新加载”。

同时我尝试使用该工具加载已删除的文件以及修改的文件wget

wget工具正确加载了修改后的文件并报告Error 404已删除的文件 - 正如我预期的那样。

然而,网络浏览器确实不是识别出一个文件被修改了,另一个文件被更改了!这是我测试过的(已测试wget):

  • 单击已删除和已修改文件的“重新加载”
  • 清除整个“最近的历史记录”
    (“时间范围:所有内容”,选择所有选项(缓存、Cookies 等))
  • 关闭网络浏览器并重新打开
  • 重新启动计算机并重新启动网络浏览器
  • 再次清除整个“近期历史记录”
  • 再次在网络浏览器中打开已删除和修改的文件
  • 此时,网络浏览器仍然显示修改文件的旧版本,并且仍然显示已删除的文件!
  • 开始wireshark
  • 在网络浏览器中单击“重新加载”
  • 最后,当我尝试打开已删除的文件时,网络浏览器向我显示了修改文件的更新版本和一条错误消息。

谁能向我解释一下这里发生了什么事?

我有两点怀疑:

  • 网络浏览器不使用自己的缓存,而是使用一些“外部”缓存机制(例如某些 Linux 范围的缓存机制),当我执行“清除历史记录”时,这些机制不会被清除
    (在使用 观察浏览器后,我有这种怀疑strace -e openat ...
  • Web 服务器有一些内部缓存,并且 Web 服务器的行为会根据所wget使用的客户端(或浏览器)而有所不同

(我怀疑启动wireshark对网络浏览器的行为没有影响。)

如果我的第一的怀疑应该是真的:

我怎样才能真正清除缓存?

我如何强制浏览器重新加载该网站?

答案1

我也遇到过这个问题,这给我带来了很多麻烦。更新现有文件需要几个小时,而在此期间我的网站会部分崩溃!CSS 文件尤其明显。有趣的是,它发生在我的根域上,但没有发生在我的测试子域上。

经过一番费力的思考,我的网站托管技术支持人员向我介绍了默认启用的“性能缓存”。基本上,他们默认缓存他们那一端的所有网页,以加快速度,但代价是牺牲网页的更新。

可以关闭,但不幸的是不适用于 CSS 文件!无论如何,解决方法是清除缓存,这需要几分钟才能传播,但考虑到这一点还不算太糟糕。我进入了我的托管服务提供商的 Web 门户(位于 sucuri.net),找到了一种方法来做到这一点。这对您来说可能有所不同,但这是我所做的:

安全 > 防火墙 > 性能 > 高级设置 > 缓存

从这里我可以看到缓存正在发生,也可以配置它,最重要的是,清除缓存。此后,我的新更新传播开来,然后我的网站又恢复正常了!

相关内容