http强缓存与协商缓存

设置响应头Cache-Control的值实现http强缓存与协商缓存

强缓存
http1.1强缓存Cache-Control: “max-age= < seconds>”,可直接命中强缓存。max-age表示资源能够被缓存(保持新鲜)的最大时间,如果http是1.1以下版本则采用响应头的Expires(包含日期/时间,无效的日期比如 0, 代表着过去的日期,即该资源已经过期) 字段做判断缓存是否过期,如果在Cache-Control响应头设置了 “max-age” 或者 “s-max-age” 指令,那么 Expires 头会被忽略。状态可为:200 from memory cache 或者 200 from disk cache
在这里插入图片描述
协商缓存
设置响应头Cache-Control: no-cache则可命中协商缓存。每次有请求发出时,缓存会将此请求发到服务器(该请求会带有与本地缓存相关的验证字段,例如ETag if-none-matchLast-Modified if-modified-since两对值的不同做验证),服务器端会验证请求中所描述的缓存是否过期,若未过期(注:实际就是返回304),则缓存才使用本地缓存副本。
在这里插入图片描述
不缓存
设置响应头Cache-Control: no-store则不走缓存,每次请求都从服务器拉去最新资源,状态返回200。

强缓存与协商缓存的区别在于:有没有到服务器端比较资源是否过期。强缓存直接判断max-age值,资源过期拉去最新资源,未过期直接使用缓存。而协商缓存则是带着If-None-Match和If-Modified-Since跟服务端的ETag和Last-Modified 做验证,判断这两对值是否都相等?相等资源则没过期其中一对值不等则更新ETag值或者 Last-Modified

备注

对于含有特定头信息的请求,会去计算缓存寿命。比如Cache-control: max-age=N的头,相应的缓存的寿命就是N。通常情况下,对于不含这个属性的请求则会去查看是否包含Expires属性,通过比较Expires的值和头里面Date属性的值来判断是否缓存还有效。如果max-age和expires属性都没有,找找头里的Last-Modified信息。如果有,缓存的寿命就等于头里面Date的值减去Last-Modified的值除以10(注:根据rfc2626其实也就是乘以10%)。
缓存失效时间计算公式如下:
expirationTime = responseTime + freshnessLifetime - currentAge
上式中,responseTime 表示浏览器接收到此响应的那个时间点。

Last-Modified是一个响应首部,其中包含源头服务器认定的资源做出修改的日期及时间。 它通常被用作一个验证器来判断接收到的或者存储的资源是否彼此一致。由于精确度比 ETag 要低,所以这是一个备用机制。包含有
If-Modified-Since 或 If-Unmodified-Since 首部的条件请求会使用这个字段。

在这里插入图片描述
由上可知:如果max-age和expires属性都没有(即Cache-Control没有值,expires属性也没有),那么就会有缓存机制,缓存时间则取Last-Modified和Date的值利用公式计算出,那其实这边就等于强缓存了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值