Firefox 显示已加载资源的方式让我感到困惑,cached
但随后我可以看到浏览器针对域名发出新的 DNS 查询并再次联系 HTTP 服务器。
下面是此行为的一个简单示例。我访问了https://example.com然后重新加载网页。正如预期的那样,加载的资源显示为cached
。但与此同时,我在后台运行 tcpdump 并注意到浏览器example.com
再次发出 DNS 查询,并在获得 DNS 响应后连接到 HTTP 服务器。
答案1
Firefox 已缓存您的对象,并且重新验证对象与原始服务器。您可以判断这一点,因为它发送了If-Modified-Since:
和Cache-Control:
请求标头。
Firefox 通常会在两种情况下重新验证缓存对象:
- 缓存的对象已过时,这是由上次缓存该对象时随其发送的
Cache-Control:
和响应标头决定的。Expires:
- 您点击了“重新加载”。
您可以看到 Web 服务器发送了304 Not Modified
响应,因此 Firefox 提供了现有的缓存对象。
HTTP 缓存可能非常复杂。要了解所有相关内容,请花一个晚上学习RFC 7234。