为什么尽管 HTTP 资源显示为“已缓存”,Firefox 仍然会连接到服务器?

为什么尽管 HTTP 资源显示为“已缓存”,Firefox 仍然会连接到服务器?

Firefox 显示已加载资源的方式让我感到困惑,cached但随后我可以看到浏览器针对域名发出新的 DNS 查询并再次联系 HTTP 服务器。

下面是此行为的一个简单示例。我访问了https://example.com然后重新加载网页。正如预期的那样,加载的资源显示为cached。但与此同时,我在后台运行 tcpdump 并注意到浏览器example.com再次发出 DNS 查询,并在获得 DNS 响应后连接到 HTTP 服务器。

日 这是预期的行为还是我遗漏了什么?感谢您阅读我的问题 <3

答案1

Firefox 已缓存您的对象,并且重新验证对象与原始服务器。您可以判断这一点,因为它发送了If-Modified-Since:Cache-Control:请求标头。

Firefox 通常会在两种情况下重新验证​​缓存对象:

  1. 缓存的对象已过时,这是由上次缓存该对象时随其发送的Cache-Control:和响应标头决定的。Expires:
  2. 您点击了“重新加载”。

您可以看到 Web 服务器发送了304 Not Modified响应,因此 Firefox 提供了现有的缓存对象。


HTTP 缓存可能非常复杂。要了解所有相关内容,请花一个晚上学习RFC 7234

相关内容