强缓存/协商缓存

  1. 强缓存/本地缓存:服务器会将数据和缓存规则一并返回,缓存规则信息包含在响应header中。Cache-Control 、Expires。
    强缓存,一旦被缓存就不会再发请求了,直接读取本地缓存资源。200。
     
  2. 弱缓存/对比缓存/协商缓存:if-Modified-Since/if-None-Match最后修改时间、last-modified/Etag(指纹)
    对比缓存,需要发送请求(需要和服务端进行浅层的交互),确认数据是否被修改,未被修改则读取缓存304。

浏览器和业务侧根据不同的报文字段,做出不同的缓存动作。

http缓存字段:

1、Cache-Control
通过响应头设置Cache-Control: max-age, 指定该请求需要在浏览器中缓存多久,在有效时间内重复请求,就不会再发起请求了,直接读取本地缓存资源,状态码200。size:disk cache(磁盘缓存)
 

2、Expires
过期时间,设置响应头Expires,指定缓存过期的时间,在过期时间重复请求则无需再访问服务端,直接读取浏览器缓存资源,状态码200,size:disk cache。

3、Etag/If-None-Match

  • Etag和If-None-Match需要搭配使用。
  • 在首次请求资源时,服务端会将 结果签名(数据结果签名) 缓存在服务端,并设置在响应头Etag字段中,返回给浏览器。
  • 业务侧则需要缓存Etag和结果数据,在下一次请求时会设置请求头If-None-Match字段,值为之前缓存的Etag,即If-None-Match: Etag。
  • 服务端再次接收到之后会将If-None-Match和最新的Etag是否相等,如果相等,则意味着数据结果并没有发生变化,直接返回304,浏览器接收到304,直接读取缓存的数据;如果不一致,则会将本次的Etag和结果数据返回给浏览器,状态码200 。
     

4、Last-Modified/If-Modified-Since
        最后一次改变/从何时改变。

  • Last-Modified需要搭配If-Modified-Since一起使用。
  • 在首次请求资源时,服务端在响应头中设置Last-Modified字段返回给浏览器。(Last-Modified资源最后一次修改的时间)
  • 业务侧缓存Last-Modified的值和结果数据,在下一次请求中携带请求头If-Modified-Since字段(值为之前接收的Last-Modified的值)。
  • 服务端再次接收到请求会对比接收到的If-Modified-Since是否大于等于当前Last-Modified(浏览器记录的数据最后一次修改的时间和真正的最后一次修改的时间,Last-Modified的时间更大则表示数据在If-Modified-Since的时间之后又被修改了), 如果是If-Modified-Since >= Last-Modified,则表示浏览器中缓存的数据依旧可用,返回304状态码,浏览器直接读取之前的缓存数据。如果否,If-Modified-Since < Last-Modified,则返回当前的Last-Modified和最新的数据,状态码200。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值