js清除浏览器缓存问题的个人见解 - Jack_zengzhen的博客 - CSDN博客
1、什么是浏览器缓存?
在Web性能优化上,我们总是追求网页能快速打开相应,这时就是浏览器缓存上场的时间了。
概念:当浏览器向服务器发起资源请求后,相应后会加载各种资源:HTML页面、图片、JS文件、CSS文件,对于一些不经常变的内容,浏览器会将它们缓存下来,等下次再访问的时候,就直接从客户端加载这些资源了。
这些被浏览器保存下来的资源成为缓存。(注意:和cookie和localStorage是不同的概念)
2、浏览器缓存机制
a、浏览器是否缓存、缓存多久都是有服务器来决定的。
准确的说,当浏览器发起资源请求后,在服务器返回的相应头中的某些字段就包含了有关缓存的信息。
通用首部字段(就是请求报文和响应报文都能用上的字段)
请求首部字段
响应首部字段
实体首部字段
b、浏览器缓存的分类
根据上面4个不同字段的信息,可以将浏览器缓存分为 “强缓存” 和 “协商缓存” 。
强缓存:Expires&Cache-Control (有效期)
命中强缓存,http状态码为200.
强缓存就是判断缓存是否在有效期内,如果在,则直接从客户端获取资源,不会发送请求向服务端。即使请求的资源已经更新。
Expires是HTTP 1.0提出的一个表示资源过期时间的header,它描述的是一个绝对时间,由服务器返回,用GMT格式的字符串表示,如:Expires:Thu, 31 Dec 2037 23:55:55 GMT,包含了Expires头标签的文件,就说明浏览器对于该文件缓存具有非常大的控制权。
Expires是较老的强缓存管理header,由于它是服务器返回的一个绝对时间,在服务器时间与客户端时间相差较大时,缓存管理容易出现问题,比如:随意修改下客户端时间,就能影响缓存命中的结果。所以在HTTP 1.1的时候,提出了一个新的header,就是Cache-Control,这是一个相对时间,在配置缓存的时候,以秒为单位,用数值表示
Cache-Control描述的是一个相对时间,在进行缓存命中的时候,都是利用客户端时间进行判断,所以相比较Expires,Cache-Control的缓存管理更有效,安全一些。
这两个header可以只启用一个,也可以同时启用,当response header中,Expires和Cache-Control同时存在时,Cache-Control优先级高于Expires。
Cache-Control 指定 public 或 private 标志。
协商缓存:Last-Modified&Etag(是否更新)
当浏览器对某个资源的请求没有命中强缓存,就会发一个请求到服务器,验证协商缓存是否命中,如果协商缓存命中,请求响应返回的http状态为304并且会显示一个Not Modified的字符串
3、浏览器缓存判断流程
4、浏览器缓存的优点
a、加快页面加载的速度,提升性能
b、缓解服务端的压力(减少请求次数)
c、减少带块消耗
5、浏览器缺点
有时候一些实时数据更新的页面是不能使用浏览器缓存的(如股票类网站实时更新数据),会出现一些错误的数据。
6、清除浏览器缓存方法
a、<meta>方法
b、清除form表单缓存
c、Jquery - ajax清除缓存
d、后端清理
网友评论