游览器缓存
-
强缓存:直接使用缓存中的数据
相关字段有expires/cache-control。cache-control优先级高于expires
-
协商缓存:强缓存失效后,和服务器协商,是否可以使用缓存中的数据
相关字段有Last-Modified/If-Modified-Since,Etag/If-None-Match
缓存是否过期--决定是否使用强缓存
缓存是否更新--决定是否使用协商缓存(协商缓存的前提是缓存yi过期)
相关字段
expires/cache-control: 缓存是否过期
Etag:第一次http请求服务端返回的唯一标识
If-None-Match:第二次http请求时,If-None-Match存放etag发送给服务端,服务端做etag比较
-
如果相同,就将If-None-Match的值设为false,返回状态为304,客户端继续使用本地缓存
-
如果不相同,就将If-None-Match的值设为true,返回状态为200,客户端重新解析服务器返回数据
Last-Modified/If-Modified-Since:与Etag类似。不过Last-Modified表示响应资源在服务器最后的修改时间,Etag优先级高于Last-Modified
为什么要使用游览器缓存?
因为服务器上的资源不是一直固定不变的,多数情况下它会更新,这个时候如果我们还访问本地缓存,那么对用户来说,那就相当于资源没有更新,用户看到的还是旧的资源;所以我们希望服务器上的资源更新了浏览器就请求新的资源,没有更新就使用本地的缓存,以最大程度的减少因网络请求而产生的资源浪费