如何告诉浏览器每 X 分钟只重新验证一次缓存的资产?

How to tell browsers to revalidate cached asset only once every X minutes?

TL;DR:如何实现像 Cache-Control: public,must-revalidate 这样的缓存,但不知何故告诉浏览器仅每隔 30 分钟重新验证一次,而不是每次请求都重新验证?

长版:

我正在提供一些 js 和 css 文件,我希望用户始终保持本地缓存更新,但要有一定的自由度。浏览器应该能够在本地缓存文件,但不需要对每个请求都重新验证。例如,在第一个 304 响应之后,继续使用已经在本地缓存的文件再使用 30 分钟就可以了:在用户导航到最前面的位置后,浏览器不需要再次检查新鲜度下一页。

我已经阅读了几篇关于如何实现像那样工作但没有成功的缓存的文章。

我知道 304 请求非常快(顺便说一句,我正在使用 CDN),因为响应主体是空的,但是浏览器仍然需要等待几毫秒,如果 4 -5 此类请求已发出,浏览器已开始排队这些 revalidation 请求。

我得到的最接近的是: Cache-Control: max-age=1800,public,must-revalidate

浏览器会在最初的 30 分钟内缓存资产,但在它变得陈旧后,浏览器将开始每次都重新验证。有什么解决办法吗?

来源: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control https://support.cloudflare.com/hc/en-us/articles/115003206852-Origin-Cache-Control

如果重新验证成功,它将再缓存 30 分钟。见 RFC 2616 10.3.5:

If a cache uses a received 304 response to update a cache entry, the cache MUST update the entry to reflect any new field values given in the response.

流程是这样的:

  • 缓存30分钟
  • max-age 将过期。
  • 将强制重新验证。
  • 它将用新的 30 分钟更新最大时限。

另见 Max-age and 304 Not Modified Processing