什么是强制缓存和协商缓存?

543 阅读1分钟

强制缓存

浏览器发送请求,看看是否有缓存?

没有缓存的话,向服务器发送请求,服务器响应后获取缓存;

有缓存的话,直接拿缓存,并查看缓存是否过期(cache-contro相对时间去判断),没有过期的话,直接去拿缓存,这就是强制缓存

总而言之而强制缓存不需要发送请求到服务端,根据请求头expires和cache-control判断是否命中强缓存

协商缓存

有缓存的情况,查看是否有ETag资源唯一标识,

有唯ETag唯一标识,请求中携带If-None-Match查看上次修改中的ETag该资源是否更新,有更新的话,服务器进行加载进行判断,返回304,向服务器发送请求,请求响应,协商缓存,进而渲染页面;没有更新的话返回200,直接请求响应拿缓存,渲染页面;

没有ETag资源唯一标识,Last-Modified查看上一次文件修改时间,If-Modified-Since去询问服务器在该日期后资源是否有更新,有更新的话,服务器加载判断,返回304,向服务器发送响应,协商缓存,没有更新的话,返回200,直接请求响应拿缓存,渲染页面;

有缓存情况,没有Etag资源唯一标识,也没有last-modified上一次文件修改日期,就直接想服务器发送请求,请求响应,协商缓存,渲染页面。

总而言之协商缓存是利用的是【Last-Modified,If-Modified-Since】和【ETag、If-None-Match】这两对请求头响应头来管理的

流程图

image.png