浏览器的缓存

浏览器缓存跟服务器有一个约定规则,工作规则很简单:检测以确保副本是最新的。浏览器会在硬盘专门开辟一个空间存储资源副本作为缓存。比如我们后台的系统,如果想记住上一步操作内容,避免用户返回上一个页面的时候页面内容被刷没了。这时候这个页面缓存起到绝对的人性化。

浏览器缓存分HTTP1.0和HTTP1.1,1.1引入了e-tag实体标签。

对象更新校验方式:

HTTP通过两种方式验证对象是否有更新if-non-match 和 if-modified-since。通过在Request中包含上述在请求头header向服务器发起询问。当response中包含e-tag头时,浏览器应该使用if-non-match来询问;response中含有last-modified头时,浏览器应用if-modified-since来进行更新询问。当服务器同时使用E-tag和last-modified时,浏览器应同时发送if-non-match和if-modified-since头,服务器应同时对这两个头进行确认,只有同时符合未更新条件方可返回304响应。

Cache控制:

用在request中的cache请求头

Pragma: no-cache :兼容早起HTTP协议版本 如1.0+

Cache-Control: no-cache ,表示不希望得到一个缓存内容。只是希望,cache设备可能忽略。

Cache-Control: no-store,表示client与server之间的设备不能缓存响应内容,并应该删除已有缓存。

Cache-Control: only-if-cached,表示只接受是被缓存的内容

用在response中控制cache的头

Cache-Control: max-age=3600,用相对于接收到的时间开始可缓存多久

Cache-Control: s-maxage=3600,与上面类似,只是s-maxage一般用在cache服务器上,并只对public缓存有效

Expires: Fri, 05 May 2018, 11:45:00 GMT 基于GMT的时间,绝对时间,但该头容易受到本地错误时间影响

Cache-Control: must-revalidate 该头表示内容可以被缓存但每次必须询问是否有更新。

各种cache-control头值和意义:

last-modified/e-tag 和cache-control/expires作用不一样,如果检测到本地的缓存在有效期内,直接使用本地缓存。两者要是一起使用,cache-control/expires优先级高于last-modified/e-tag ,这两者可以一起使用,利用服务器返回码304的配合,从而减少响应的开销,提高性能。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180814G1G7VC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券