问题描述
有人评论了 this question 关于缓存:
...使用 Cache-Control 值:max-age=0,s-maxage=604800 似乎得到了我想要的即时客户端更新新页面内容的行为,但仍然在 CDN 级别缓存
我真的可以在 CDN 级别缓存并为我的用户提供即时更新吗?
有意义吗?这种组合如何运作?
解决方法
是的,这是有道理的。
使用该评论中提到的配置,您的用户将收到 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
会做得更好。
无缓存
响应可以存储在任何缓存中,即使响应通常是不可缓存的。但是,存储的响应在使用之前必须始终先通过源服务器的验证,因此,您不能将 no-cache 与 immutable 结合使用。如果您打算不在任何缓存中存储响应,请改用 no-store。该指令不能有效防止缓存存储您的响应。