浏览器缓存知识小结

浏览器缓存基本认识

览器在加载资源时,会根据该资源的http header判断是否命中强缓存,如命中,浏览器会直接在缓存加载资源,不会不会发请求到服务器。如无命中,则会发送请求给服务器,看是否命中协商缓存,但不会返回资源的数据,而是告诉客户端可以直接从缓存中加载这个资源,于是浏览器就又会从自己的缓存中去加载这个资源;当协商缓存也没有命中的时候,浏览器直接从服务器加载资源数据。

浏览器缓存分为强缓存和协商缓存:

强缓存:Expires、Cacha-Control;

协商缓存:If-Modified-Since、Last-Modified,ETag、If-None-Match;

强缓存的原理

Expires是http1.0提出的一个表示资源过期时间的header,它描述的是一个绝对时间,由服务器返回,用GMT格式的字符串表示,如:Expires:Thu, 31 Dec 2037 23:55:55 GMT。

Cache-Control描述的是一个相对时间,在进行缓存命中的时候,都是利用客户端时间进行判断,所以相比较Expires,Cache-Control的缓存管理更有效,安全一些。(Expires是较老的强缓存管理header,由于它是服务器返回的一个绝对时间,在服务器时间与客户端时间相差较大时,缓存管理容易出现问题,比如随意修改下客户端时间,就能影响缓存命中的结果。所以在http1.1的时候,提出了一个新的header,就是Cache-Control,这是一个相对时间,在配置缓存的时候,以秒为单位,用数值表示,如:Cache-Control:max-age=315360000)

【注意】强缓存是前端性能优化最有力的工具,没有之一,对于有大量静态资源的网页,一定要利用强缓存,提高响应速度。

协商缓存的原理

扫描二维码关注公众号,回复: 3217292 查看本文章

【Last-Modified,If-Modified-Since】都是根据服务器时间返回的header,一般来说,在没有调整服务器时间和篡改客户端缓存的情况下,这两个header配合起来管理协商缓存是非常可靠的,但是有时候也会服务器上资源其实有变化,但是最后修改时间却没有变化的情况,而这种问题又很不容易被定位出来,而当这种情况出现的时候,就会影响协商缓存的可靠性。所以就有了另外一对header来管理协商缓存,这对header就是【ETag、If-None-Match】。

【ETag、If-None-Match】通过浏览器生成的唯一标识,只要资源有变化这个串就不同,跟最后修改时间没有关系,所以能很好的补充Last-Modified的问题。

猜你喜欢

转载自www.cnblogs.com/moveup/p/9655284.html