浏览器的强缓存与协商缓存

浏览器的强缓存与协商缓存
资料参考:https://www.cnblogs.com/wonyun/p/5524617.html
https://www.jianshu.com/p/fb59c770160c
https://www.jianshu.com/p/9c95db596df5

对上述参考资料做总结:
缓存:缓存就是一个资源副本,目的是为了减少资源请求,存储量较大。
HTTP-Cache:分为强缓存协商缓存
1.强缓存:不请求服务器,直接从本地副本比对读取,返回状态码200.
2.协商缓存:去服务器比对,没改变直接读取本地缓存,状态码304

强缓存:不会发请求到服务器,直接从缓存取

  • expires:服务器在返回请求资源时,在ResponseHeaders中增加expires字段表示过期时间。客户端再次请求资源时,会把客户端的时间与其进行对比,没过期会直接使用缓存资源。(有一个问题:客户端的时间是可以修改的,浏览器跟随系统时间,所以会有影响,cache-control用来解决该问题)

expires: Thu, 03 Jan 2019 11:43:04 GMT

  • cache-control:cache-control不依赖客户端时间,当cache-control和expires同时存在时,cache-control的优先级更高。cache-control单位时间为秒,表示资源多少秒后失效

cache-control: public, max-age=3600, s-maxage=3600
s-maxage允许代理服务器缓存

	 - max-age和s-maxage(优先级更高)是cacahe-control主要字段,上例中表示过了3600秒后资源失效。max-age=0表示立马过期,向服务器请求资源
	 - public:该资源可被所有客户端、代理服务器缓存
	 - private:该资源只能客户端缓存(默认值private),当设置了s-maxage时由于允许代理服务器缓存所以相当于public
	 - no-cache:如果设置了no-cache本地缓存就会被忽略,向服务器验证当前资源是否更新(因为直接和服务器交互,所以会忽略max-age)
	 - no-store:如果设置了no-store本地缓存就会被忽略,完全不使用缓存策略,直接向服务器请求最新资源(因为直接和服务器交互,所以会忽略max-age)

列举:

cache-control: no-cache
跳过设置强缓存,但是不妨碍设置协商缓存;一般如果你做了强缓存,只有在强缓存失效了才走协商缓存的,设置了no-cache就不会走强缓存了,每次请求都回询问服务端

cache-control: no-store
不缓存,这个会让客户端、服务器都不缓存,也就没有所谓的强缓存、协商缓存了。

cache-control: max-age=xxxx,public
客户端和代理服务器都可以缓存该资源,客户端在xxx秒的有效期内,如果有请求该资源的需求的话就直接读取缓存,statu code:200 ,如果用户做了刷新操作,就向服务器发起http请求

cache-control: max-age=xxxx,private
只让客户端可以缓存该资源;代理服务器不缓存,客户端在xxx秒内直接读取缓存,statu code:200

cache-control: max-age=xxxx,immutable
客户端在xxx秒的有效期内,如果有请求该资源的需求的话就直接读取缓存,statu code:200 ,即使用户做了刷新操作,也不向服务器发起http请求

  • pragma
    优先级pragma>coche-control>expires

协商缓存:强缓存就是给资源设置个过期时间,客户端每次请求资源时都会看是否过期;只有在过期才会去询问服务器。所以,强缓存就是为了给客户端自给自足用的。而当某天,客户端请求该资源时发现其过期了,这是就会去请求服务器了,而这时候去请求服务器的这过程就可以设置协商缓存。这时候,协商缓存就是需要客户端和服务器两端进行交互的。

  • last-modified记录资源最后的修改时间,启用后,请求资源后的响应头会增加一个last-modified字段
  • etag会基于资源的内容编码生成唯一的标识字符串,etag比last-modified更精确的感知了内容的变化,优先级更高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值