初识浏览器的强缓存和协商缓存

什么是浏览器缓存,为什么要缓存:

浏览器缓存是将浏览器初次加载的文档保存到本地磁盘中,当浏览器再次请求文档的时候可以直接从本地进行加载;所以通过浏览器缓存可以减少和服务器的请求,降低服务器负担,减少冗余数据的传输,从而加快客户端的加载速率;

什么是强缓存和协商缓存?

强缓存:利用http头中的Expires和Cache-Control俩个字段来表示资源缓存时间,普通刷新会忽略它,但是不会清除,需要强制刷新(Ctrl+F5||地址栏中直接刷新),浏览器强制刷新的时候,请求会带上Cache-Control:no-cache和Pragma:no-cache;

扩展一:什么是Expires和Cache-Control?他俩优先级是什么?

Expires的值是一个绝对时间的时间字符串,标识的是本地缓存资源失效的时间;

Cache-Control代表的是本地缓存资源的相对时间,常用的值有max-age,如max-age=1000表示资源的有效时间是1000秒;no-cache表示不适用本地缓存,使用协商缓存;no-store禁止浏览器缓存数据,每次请求都从服务器获取;public可以被所有用户缓存;private只能被浏览器终端用户缓存;

如果上述俩者都存在,难么Cache-Control的优先级高于Expires;

协商缓存:通过Etag和If-None-Match标识由服务器确定缓存的资源是否可用,普通刷新(F5)会启用协商缓存

扩展二:什么是Etag和If-None-Match?

两者返回的是一个校验码,Etag可以保证每个资源的唯一性,资源的变化都会引起ETag的变化,服务器根据浏览器传送的If-None-Match来确定是否重新缓冲;

扩展三:浏览器的缓存过程

浏览器缓存流程图
浏览器缓存流程图
​​​​​

1.浏览器请求某一资源时,会先获取该资源缓存的header信息,然后根据header中的Cache-Control和Expires来判断是否过期,。若没过期则直接从缓存中获取资源信息,包括缓存的header的信息,所以此次请求不会与服务器进行通信。这里判断是否过期。则是强缓存相关,后面会讲Cache-Control和Expires相关。

2.如果显示已过期,浏览器会向服务器端发送请求,这个请求会携带第一次请求返回的有关缓存的header字段信息,比如客户端会通过If-None-Match头将先前服务器端发送过来的Etag发送给服务器,服务会对比这个客户端发过来的Etag是否与服务器的相同,若相同,就将If-None-Match的值设为false,返回状态304,客户端继续使用本地缓存,不解析服务器端发回来的数据,若不相同就将If-None-Match的值设为true,返回状态为200,客户端重新机械服务器端返回的数据;客户端还会通过If-Modified-Since头将先前服务器端发过来的最后修改时间戳发送给服务器,服务器端通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回最新的内容,如果是最新的,则返回304,客户端继续使用本地缓存。

上述内容以及流程图转载自https://blog.csdn.net/hhthwx/article/details/79942437,如侵必删;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值