强缓存与协商缓存

在工作中,前端代码打包之后的生成的静态资源就要发布到静态服务器上,这时候就要做对这些静态资源做一些运维配置,其中,gzip 和设置缓存是必不可少的。这两项是最直接影响到网站性能和用户体验的。

缓存的优点:

  • 减少了不必要的数据传输,节省带宽
  • 减少服务器的负担,提升网站性能
  • 加快了客户端加载网页的速度
  • 用户体验友好

缺点:

  • 资源如果有更改但是客户端不及时更新会造成用户获取信息滞后,如果老版本有 bug 的话,情况会更加糟糕。

强缓存

强制缓存就是直接从浏览器缓存查找该结果,并根据结果的缓存规则来决定是否使用该缓存的过程。

1.Expires Expires 的值为服务端返回的到期时间,即下一次请求时,请求时间小于服务端返回的到期时间,直接使用缓存数据。 Expires 是 HTTP 1.0 的东西,现在默认浏览器均默认使用 HTTP 1.1,所以它的作用基本忽略。

不存在该缓存结果和标识,强制缓存失效,则直接向服务器发起请求(跟第一次发起请求一致) 存在缓存结果和标识,但结果已失效,强制缓存失效,则使用协商缓存 存在缓存结果和标识,并且结果未失效,强制缓存生效,直接返回该结果

控制强制缓存的字段分别是 Expires 和 Cache-Control,其中 Cache-Control 优先级比 Expires 高,Cache-Control/Expires 同时存在时,只有 Cache-Control 生效

强缓存总结

  1. cache-control: max-age=xxxx,public
    • 客户端和代理服务器都可以缓存该资源;
    • 客户端在 xxx 秒的有效期内,如果有请求该资源的需求的话就直接读取缓存,statu code:200 ,如果用户做了刷新操作,就向服务器发起 http 请求
  2. cache-control: max-age=xxxx,private
    • 只让客户端可以缓存该资源;代理服务器不缓存
    • 客户端在 xxx 秒内直接读取缓存,statu code:200
  3. cache-control: max-age=xxxx,immutable
    • 客户端在 xxx 秒的有效期内,如果有请求该资源的需求的话就直接读取缓存,statu code:200 ,即使用户做了刷新操作,也不向服务器发起 http 请求
  4. cache-control: no-cache
    • 跳过设置强缓存,但是不妨碍设置协商缓存;
    • 一般如果你做了强缓存,只有在强缓存失效了才走协商缓存的,设置了 no-cache 就不会走强缓存了,每次请求都回询问服务端。
  5. cache-control: no-store
    • 不缓存,这个会让客户端、服务器都不缓存,也就没有所谓的强缓存、协商缓存了。
上次更新:
贡献者: 郑壮