浏览器缓存知识小结

浏览器缓存基本认识

览器在加载资源时,会根据该资源的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)前端性能

 

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

协商缓存的原理性能

 

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

 

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

相关文章
相关标签/搜索