HTTP Cache Control max-age,必须重新验证

问题描述 投票:69回答:3

我有几个与Cache-Control相关的查询。

如果我为静态html / js / images / css文件指定Cache-Control max-age=3600, must-revalidate,并在HTTP标头中定义了Last Modified Header:

  1. 浏览器/代理缓存(如Squid / Akamai)是否会在max-age到期之前一直到源服务器进行验证?或者它会从缓存中提供内容直到max-age到期?
  2. 在max-age到期后(即从缓存到期),是否有If-Modified-Since检查或从原始服务器重新下载的内容w / o If-Modified-Since check?
http http-headers cache-control
3个回答
53
投票

a)如果服务器包含此标头:

Cache-Control "max-age=3600, must-revalidate"

它告诉客户端缓存和代理缓存,一旦内容过时(超过3600秒),它们必须在原始服务器上重新验证才能提供内容。这应该是缓存系统的默认行为,但must-revalidate指令使此要求明确无误。

b)客户应重新验证。它可能使用带有ETag的If-MatchIf-None-Match标头重新验证,或者它可能使用带有日期的If-Modified-SinceIf-Unmodified-Since标头。


4
投票

一个。查看this page上的“统计”标签,看看会发生什么。

湾到期后,浏览器将在服务器上检查文件是否已更新。如果没有,服务器将使用304 Not Modified标头进行响应,并且不会下载任何内容。

您可以通过查看Firebug中的“Net”面板或类似工具来自行检查此行为。只需在地址栏中重新输入URL,并将缓存为空时的HTTP请求数与请求数进行比较。


0
投票

给定的答案是不正确的,至少对于2019年的Web浏览器而言。

“到期后,浏览器将在服务器上检查文件是否已更新”< - 不是

我有一个静态文件,其中包含“Cache-Control:public,must-revalidate,max-age = 864000”,Chrome和Firefox每次都会发出请求(并且每次都会返回304 Not Modified)。

© www.soinside.com 2019 - 2024. All rights reserved.