HTTP 缓存控制最大年龄,必须重新验证

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

如果我为一个静态 html/js/images/css 文件指定 Cache-Control max-age=3600, must-revalidate,最后修改的 Header 在 HTTP Header 中定义:

  1. 浏览器/代理缓存(如 Squid/Akamai)是否一直到原始服务器验证 在最大年龄到期之前?或者它将提供从缓存到最大年龄过期的内容?
  2. 在 max-age 过期(即缓存过期)之后,是否有一个 If-Amendment-since 检查,或者是否从原始服务器重新下载了内容 w/o If-Amendment-since 检查?
102959 次浏览

看看 这一页上的“统计”标签,看看会发生什么。

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

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

A)如果服务器包括这个标题:

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

它告诉客户端缓存和代理缓存,一旦内容过期(超过3600秒) ,它们必须在原始服务器上重新验证,然后才能提供内容。这应该是缓存系统的默认行为,但是 must-revalidate指令使得这个需求毫不含糊。

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

给出的答案是不正确的,至少对2019年的网络浏览器来说是这样。

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

我有一个静态文件“ Cache-Control: public,must-revalidation,max-age = 864000”,Chrome 和 Firefox 每次都会执行一个请求(每次都会返回一个304 Not Amendment)。