因为服务器上的资源不是固定不變的大多数情况下会更新,若请求服务有更新那么久返回新的资源没有更新就使用本地资源,以最大的程度去减少因网络请求而产生嘚资源浪费
Expires(绝对时间)缓存过期时间,用来指定资源到期的时间是服务端的具体时间点。若服务器与客户端时间偏差较大则会导致缓存混乱。于是发展了cache-control
以下截图来自百度随机搜索查看到的接口信息
浏览器第一次请求一个资源的时候服务器返回的header会加上Last-Modify,它是一個时间便是该资源的最后修改时间当浏览器再次请求资源时,发送的请求头重会包含If-Modify-Since该值为缓存之前返回的Last-Modify。服务器收到If-Modify-Since后根据资源嘚最后修改时间来判断是否命中缓存
Etag/If-None-Match 返回的是一个校验码(Etag:entity tag)Etag可保证每一个资源都是唯一的资源变化都会导致Etag的变化,Etag值变更就说明了資源状态已经被修改服务器根据把浏览器发送的If-None-Match值来判断是否命中缓存
以下截图来自百度随机搜索查看到的接口信息
浏览器加载页面时請求数据的流程[缓存]:
1.先判断是否命中强缓存(请求不会发送到服务器),若命中http返回码还是返回200,但是会显示from cache
2.若没有命中则服务器来判斷浏览器缓存是否失效(资源请求会发送到服务器上校验),若缓存可用则并不会返回资源信息,浏览器会继续从缓存中加载数据若协商緩存命中,则http返回码为304
3.若未命中协商缓存则服务器会返回完整的资源给浏览器,浏览器加载新资源并更替缓存信息
发布了2 篇原创文章 · 獲赞 0 · 访问量 101