即使设置了“Cache-Control: max-age”,浏览器是否继续发送资源请求?

Does browser continue to send requests for resource even with `Cache-Control: max-age`

本文关键字:继续 是否 浏览器 请求 资源 设置 Cache-Control max-age      更新时间:2023-09-26

我正在阅读一篇很棒的关于缓存的文章,里面有以下内容:

验证器非常重要;如果一个人不在场,而且没有任何可用的新鲜度信息(过期或缓存控制),缓存将不存储任何表示。

最常见的验证器是文档最后更改的时间,如Last-Modified头所述。当缓存有存储的包含Last-Modified标头的表示形式,它可以使用它询问服务器表示自上次以来是否发生了更改时间,与If-Modified-Since请求。

所以,我想知道浏览器是否继续为资源发送请求(例如HEAD),即使我指定了Cache-Control: max-age=3600 ?如果没有,那么这个标题还有什么意义呢?是否在max-age时间过去后使用?

Cache-Control: max-age=3600标头意味着浏览器将缓存响应长达3600秒。在此时间过后,如果不首先确认它仍然是新鲜的,则可能不再提供响应。

为此,浏览器可以:

  • 使用正常的GET请求获取全部资源(再次传输整个响应体)
  • 或者基于ETag (If-None-Match)或Last-Modified报头(If-Modified-Since)执行重新验证,即客户端仅在实际更改时获取响应体。当然,这只有在验证器存在于原始响应中时才有可能。

简而言之:同时使用max-age和缓存验证器的原因是首先缓存响应一段时间,然后执行节省带宽的重新验证以确认资源的新鲜度。