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

时间:2010-05-28 22:23:51

标签: http http-headers cache-control

我有几个与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检查或从原始服务器重新下载的内容没有If-Modified-Since check?

3 个答案:

答案 0 :(得分:52)

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

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

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:0)

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

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

我有一个带有“缓存控制:public,must-revalidate,max-age = 864000”的静态文件,Chrome和Firefox每次都发出请求(并每次返回304 Not Modified)。 / p>