HTTP 缓存策略解析

做项目的时候遇到过需要将静态资源长期缓存的情况,因为在我们的需求里,最初一个静态资源上传完毕,针对此链接一次发布终生受益——于是乎,是时候研究一波缓存策略了:

我们都知道缓存状态码:304 Not Modified. 然而实际上,命中缓存也不一定是 304 的。

我们这里先要说明 HTTP Response 头中的 cache-control 的几种不同类型或者说关键词:no-cache / no-store / public / private / max-age

no-cache 并不代表完全的禁用缓存,而是代表会每次去核对服务端的 Etag,如果相同,那么就不会去服务端下载完整的资源,返回一个 304 Not Modified。(最长缓存 3 年)

no-store 才是真正的禁用缓存,它表示每次服务端都会去下载最新的资源。(当然,通常似乎都用不上)。

publicprivate 的差别主要在于如果是有用户认证环节的页面,设置为private 就只有终端浏览器会缓存,中间 CDN 并不会缓存,而设置为 public,则会在每一个环节缓存。默认不需要设置 public,因为 max-age 已经表明可以由各个环节缓存了(单位为秒)。此刻如果命中缓存,则不会再去请求服务器核对 Etag,而是直接返回 200(from disk)。

当然,由于 public 会在每一个环节缓存,如果对修改更新预览又强需求的网页,那么最好不要使用这一缓存策略,否则还需要刷新 CDN 源,很麻烦。

Google 有一张图指导我们挑选合适的缓存策略,可供参考:

参考内容:

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 知识, http

已有 4 条评论

  1. oToToTo

    第一次评论好激动啊要不要准备什么

  2. oToToT

    这里怎么登录啊 每次打名字很辛苦

    1. 0.0奇怪 理论应该会记住才对 而且审核也只要审核第一次 =。=你怎么要审核多次

  3. oToToTo

    可能是我在发邮件???

添加新评论