赞
踩
1.减少不必要的数据传输,节省宽带
2.减少服务器负担,提升网页性能
3.加快客户端加载网页的速度
4.用户体验友好
资源如果有更改,但客户端不及时更新会造成用户信息滞后,如果老版本有bug的话,情况会更糟糕
response header中 cache-control 常见的设置是max-age public private no-cache no-store
response header中 etag、last-modified
etag:每个文件有一个,改动文件了就变了,是一个文件hash
last-modified 文件的修改时间,精确到秒
在每次请求返回的返回头中都有etag和last-modified ,在下次请求时请求头就会把这两个带上,服务端会把带来的两个标识进行比对,然后判断资源是否更改,如果资源没有更改,那就不变etag和last-modified,浏览器会读取本地缓存,如果资源发生更改了,就直接返回新的资源以及新的etag和last-modified
只有协商缓存的流程
强缓存和协商缓存都有的情况
客户端请求资源=> 已过期 => 进行协商缓存
客户端请求资源=> 未过期 => 浏览器读取本地缓存 200
注:在返回头response header 中的etag和last-modified在客户端重新发起请求时在请求头request header中换个key名:
etag -> if-none-matched
last-modified -> if-modified-since
为什么要有etag?
http1.1中新增的etag,为了解决之钱last-modified比较难解决的问题
1.一些文件也许会周期性的更改,但是他的内容并没有发生实际的改变,变得只是修改时间,这个时候我们并不希望客户端认为这个文件修改了,需要去重新请求
2.某些文件被修改的十分频繁,比如在秒以下的时间进行修改,比如1s修改了n次,if-modified-since能检查到的粒度时秒级的,这种修改无法去判断
3.某些服务器不能精确的得到文件的最后修改时间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。