【问题标题】:Does it make sense to set Cache-Control max-age=0 and s-maxage= not zero?设置 Cache-Control max-age=0 和 s-maxage= 不为零是否有意义?
【发布时间】:2021-05-12 11:55:37
【问题描述】:

有人评论this question关于缓存:

...使用 Cache-Control 值:max-age=0, s-maxage=604800 似乎可以获得我想要的即时客户端更新新页面内容的行为,但仍然在 CDN 级别缓存

我真的会在 CDN 级别获得缓存并为我的用户提供即时更新吗?

这有意义吗?这种组合如何运作?

【问题讨论】:

    标签: caching header cache-control max-age s-maxage


    【解决方案1】:

    是的,这是有道理的。

    使用该评论中提到的配置,您的用户将收到 instant 过时的响应,因此他们必须在下次发出请求时对其进行验证。 CDN 会将有效响应缓存604800 秒。因此,重复的请求将主要由 CDN 提供,而不是 Origin 服务器。

    但是如果你更新你的应用呢? CDN 上的陈旧缓存会发生什么情况?

    新部署后,您需要确保 CDN 中的所有陈旧缓存都将被清除/清除。

    例如,请参阅Purging cached resources from Cloudflare:它为您提供了多种选择。

    • 按单个文件(按 URL)清除
    • 通过 Cloudflare 仪表板按单个文件清除
    • 清除一切
    • 通过 API 清除缓存资源

    例如Firebase Hosting会在新部署后清除所有CDN缓存:

    任何请求的静态内容都会自动缓存在 CDN 上。如果您重新部署网站的内容,Firebase 托管会自动清除 CDN 中所有缓存的静态内容,直到下一次请求为止。

    就评论中建议的设置而言,我认为Cache-Control: no-cache 会做得更好。

    来自MDN - Cache Control

    无缓存

    响应可能由任何缓存存储,即使响应通常是不可缓存的。但是,存储的响应在使用之前必须始终通过原始服务器的验证,因此,您不能将 no-cache 与 immutable 结合使用。如果您不想将响应存储在任何缓存中,请改用 no-store。该指令在阻止缓存存储您的响应方面无效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 2018-11-24
      • 2011-12-08
      相关资源
      最近更新 更多