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

时间:2018-04-25 14:06:17

标签: caching http-headers http-caching

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

长版:

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

我已经阅读了一些关于如何实现类似的缓存但没有成功的文章。

我理解304请求非常快(我使用CDN顺便说一句),因为响应正文是空的,但仍然,浏览器仍需要等待几毫秒,如果是4这样的请求就是这样的,浏览器已经开始排队这些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

1 个答案:

答案 0 :(得分:1)

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

  

如果缓存使用收到的304响应来更新缓存条目,缓存必须更新条目以反映响应中给出的任何新字段值

流程是这样的:

  • 它将被缓存30分钟。
  • 最大年龄将过期。
  • 将被迫重新验证。
  • 它会在30分钟后更新最大年龄。

另见Max-age and 304 Not Modified Processing