HTTP篇 -- 浏览器缓存机制

浏览器缓存机制有两种:

  1. 强缓存(默认)
    浏览器访问网站后会强缓存资源,第二次刷新就不会请求服务器(一般会定个时间再去请求服务器)
  2. 协商缓存

强缓存:
通过响应头中的Cache-Control属性判断

  • private:客户端可以缓存
  • public: 客户端和代理服务器都可缓存
  • max-age=xxx : 缓存的内容将在 xxx 秒后失效
  • no-cache:需要使用对比缓存来验证缓存数据
  • no-store:所有内容都不会缓存,基本不用

协商缓存:

  1. 第一次请求返回给客户端数据和缓存信息,也就是一个特定的缓存标识

  2. 客户端把这个缓存标识放到缓存数据库

  3. 再次请求时,客户端把缓存标识也一起发给服务端,进行对比,判断成功后,返回304状态码,通知客户端比较成功,可以使用缓存数据

两种缓存标识

  • Etag:(唯一标识)优先级更高
  • Last-Modified/If-Modified-Since:返回给客户端最后这个资源的修改时间,优先级没有Etag

协商缓存标识不生效时,状态码200,服务端返回body和header

在对比缓存标识生效时,状态码为304,并且报文大小和请求时间大大减少。原因是缓存标识生效只返回header部分,通过状态码通知客户端使用缓存,不再需要将报文主体部分返回给客户端


总结

  1. 强制缓存的优先级更高,如果没失效,就直接用缓存数据库里的东西
  2. 如果时间已经失效了,就看用的是哪种标识(Etag服务端生成的唯一标识,还是last-modified资源最后修改时间标识)返回304就用缓存里的,返回200就返回body和新的header

猜你喜欢

转载自blog.csdn.net/weixin_44257930/article/details/108829349