浏览器缓存机制

2019-01-29  本文已影响0人  sarah_wqq

浏览器会把一些重复请求的数据保存在缓存中,可以很好的加快请求响应速度,提高了用户体验,但是一些情况下又会缓存已经过时的老数据,使得页面展示错误。
浏览器会根据缓存机制决定使用缓存还是再次向服务器发送请求。


缓存.png

1.缓存过程

2.强制缓存

控制强制缓存的字段分别是ExpiresCache-Control,Cache-Control优先级高于Expires。

1)Expires 规定资源的失效时间

Expires 的值为服务器返回该请求结果缓存的到期时间,即再次发起该请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。

2) Cache-Control 规定资源是否需要被浏览器缓存以及缓存的有效时间等

Cache-Control的取值有:

3)强制缓存的三种情况

4)优缺点

Expires 是HTTP/1.0控制网页缓存的字段,到了HTTP/1.1,Expire已经被Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间与服务端返回的时间做对比,那么如果客户端与服务端的时间因为某些原因(例如时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存则会直接失效。

到了HTTP/1.1,Expire已经被Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间与服务端返回的时间做对比,那么如果客户端与服务端的时间因为某些原因(例如时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存则会直接失效。

3.协商缓存

协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程。
控制字段有Last-Modified / If-Modified-Since和Etag / If-None-Match,其中Etag / If-None-Match的优先级比Last-Modified / If-Modified-Since高

1)Last-Modified / If-Modified-Since

服务器根据If-Modified-Since的值与该资源在服务器的最后被修改时间做对比,若服务器的资源最后被修改时间大于If-Modified-Since的字段值,则重新返回资源和新的Last-Modified值,状态码为200;否则则返回304,代表资源无更新,可继续使用缓存文件

2)Etag / If-None-Match

服务器根据请求头中If-None-Match值与该资源在服务器的Etag值做对比,一致则返回304,代表资源无更新,继续使用缓存文件;不一致则重新返回资源文件,状态码为200

3)协商缓存的两种情况

4)优缺点

4.总结

强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match)。
协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存。

上一篇 下一篇

猜你喜欢

热点阅读