浏览器缓存相关知识
浏览器的缓存机制--强缓存和协商缓存
- 强缓存在这个资源过期之前一直再用本地的资源,不与服务器进行交互。 (主要靠+ http1.0 expire 具体的时间2023年1月1日+ http1.1 cache-control 1年 (优先级高)) (类似于家乡要饭,还都是熟人的小区要饭,大家都不会惊讶,还会每天都给东西不用付出努力,这就是缓存,人脉的力量。但忽然有一天这个小区全拆迁了,然后你就跟他们商量,我还去你们新小区,可以吗?也就进入了协商缓存)
- 协商缓存,就是过期后,会去服务器进行一次交互,如果服务器没有更新还是旧资源,就不去更新。 (+ http1.0 last-modified/if-modified-since ,+ http1.1 etag/if-none-match(优先级高)) (当你得到熟人的允许后,你还要先去问当地的地头蛇,也就是丐王,我能在这块要饭吗,得到了允许才可以,但是有一天地头蛇想规划一下手里的地,归来归去发现你很碍眼,你就被被优化掉了,然后你的这块地就被其他人给占了,你当场饿死了) 强缓存不会与服务器进行交互,协商缓存会与服务器交互一次来判断资源有没有更新。
举例:
- 有一个img标签,其路径src是1.png。第一次去服务器发起请求的时候拿回来资源的同时会在响应报文里拿过来拿回来expire,cache-control,last-modified,etag。
- 当过去一段时间,又有一个别的页面上面有一个img,src也是logo.png,这个时候就去看一下本地有没有缓存资源。
- 发现本地有该资源,在判断expire和cache-control(优先级高)发现没有过期,这块属于强缓存,就直接在本地拿取使用,不用去服务获取。
- 当强缓存过期了,就进入协商缓存,就向服务器发送一个请求把if-modified-since(值就是last-modifyed)/if-none-match(etag)通过请求头发过去,服务器发现这块资源没有更新,就返回状态码304,就继续使用本地资源。如果服务器资源更新了,服务器就返回200的状态码,服务器就会更新图片的路径。流程重新走一遍。