浏览器缓存机制

http的缓存机制

更多:https://www.jianshu.com/p/54cc04190252
浏览器的缓存有四种
1、service Worker 浏览器线程缓存(chrome控制台 application/cache Storage),可控制缓存内容(catch.match()和catch.put()),永久的存储,是新的可控属性,并且只要走了service worker 的fetch方法,即使没有命中资源,接下来去寻找memory disk甚至发起了网络请求,最终也会被标志为service命中。
2、memory cache 内存,tab页关闭释放,小而快(preloader相关)好像一个黑盒,是不受控制的,也不遵循请求头的字段设置,会忽略max-age;可以通过设置no-store来强制不适用内存缓存。
3、disk cache 硬盘,容量和时效优势,大文件和内存低的时候放入硬盘,严格按照字段设置,平时我们所说的强缓存 协商缓存说的都是硬盘缓存。
4、push cache 是http2.0的服务端推送,任何资源都可能被推送,是检查缓存的最后一步,连接断开就释放,只能被适用于一次,但是浏览器支持上并不太兼容
5、indexDB 浏览器数据库,支持多种数据格式,支持增删改查,初始50M且可以扩容,以后可能会用于web应用升级,无网络开启等
当第一次发送请求得到相应数据后,会在本地进行缓存,当下次再次发送这个请求的时候,会带上上次得到的一些数据,那么浏览器如何选择缓存的机制呢

常见的http缓存都是针对get请求来说的,在控制台,关闭过滤器就可以看到每个页面所请求的js css img文件以及加载来源
更多:https://juejin.im/post/5c22ee806fb9a049fb43b2c5?utm_source=gold_browser_extension

强制缓存:

1.高——pragma(通用首部字段) 兼容http1.0版本 设置no-cache 表示禁用缓存
2.中——cache-control http1.1版本新增(通用首部字段)
no-cache 表示不直接使用缓存而去进行协商缓存(经常变动的资源可以设置,减少)
no-store 表示禁用缓存
max-age表示相对的缓存时间
public 表示客户端和代理服务器均可缓存
private 代表只有客户端可以缓存
3.低——expires 缓存过期的绝对时间(实体头部字段)

  1. 服务端传回的last-Modified保存在请求头if-Modified-Since 发送
    由于保存时间只能在秒级,则该方式失效
    并且服务端可能会动态保存,则起不到缓存的效果
  2. 同样 服务端的Etag对应请求头的if-None-Match

协商缓存:

2.当请求中的if-None-Match与Etag一致 则服务器处理返回200 不一致则否则返回412
当请求头的if-Modified-Since在实体修改之前说明资源更新了 则服务器处理返回新的资源200 否则没更新304直接取用缓存
3.字段If-None-Match(与Etag不一致服务器处理) 与If-Match相反
字段If-UnModified-Since(资源未更新则服务器处理)与If-Modified-Since相反
4.F5刷新的时候 强缓存失效直接发起请求进行协商缓存的步骤,原因是默认设置了cache-control的max-age为0 实现
Ctrl+F5 强缓存和协商缓存都失效直接请求资源
看下这2篇文章: https://www.jianshu.com/p/227cee9c8d15
https://blog.csdn.net/u012375924/article/details/82806617

你可能感兴趣的:(浏览器缓存机制)