HTTP的强缓存与协商缓存

强缓存策略

直接从本地副本比对读取,不去请求服务器,返回的状态码是 200

cache-control

HTTP1.1 新增了 cache-control 字段,当 cache-controlexpires 都存在时,cache-control 优先级更高。该字段是一个时间长度,单位秒,表示该资源过了多少秒后失效。当客户端请求资源的时候,发现该资源还在有效时间内则使用该缓存,它不依赖客户端时间cache-control 主要有 max-ages-maxagepublicprivateno-cacheno-store 等值。

// 给返回头Response Headers中设置过期时间,下图中Cache-Control优先级高于Expires
res.setHeader('Cache-Control', 'max-age=20')

 我们在10秒后刷新依然在读缓存说明缓存生效而且是以Cache-Control优先的。

协商缓存

上面的 expirescache-control 都会访问本地缓存直接验证看是否过期,如果没过期直接使用本地缓存,并返回 200。但如果设置了 no-cache no-store 则本地缓存会被忽略,会去请求服务器验证资源是否更新,如果没更新才继续使用本地缓存,此时返回的是 304,这就是协商缓存

协商缓存主要包括 last-modifiedetag

方式一:last-modified & if-Modified-Since

  1. 静态资源应答时都会通过last-modified来标示修改时间。
  2. 浏览器下次请求相同资源会将last-modified时间作为if-modified-since字段放在请求报文中用以询问服务器是否该资源过期。
  3. 服务器需要通过规则判断是否过期
  4. 过期时直接返回200并在body中放入更新内容
  5. 如果未过期则直接返回304状态码即可

方式二:etag & if-None-Match

 该方法一般的做法是将返回内容进行摘要(Hash),然后通过对比摘要来判断内容是否更新。

  1. 静态资源应答时都会通过etag来标示内容摘要。
  2. 浏览器下次请求相同资源会将etag作为if-none-match字段放在请求报文中用以询问服务器是否该资源过期。
  3. 服务器需要通过和服务器内容的摘要进行比对确定是否过期
  4. 过期时直接返回200并在body中放入更新内容
  5. 如果未过期则直接返回304状态码即可

以上就是我对HTTP的强缓存与协商缓存的理解,如果文章由于我学识浅薄,导致您发现有严重谬误的地方,请一定在评论中指出,我会在第一时间修正我的文章,以避免误人子弟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值