浏览器-缓存(协商缓存和强制缓存)

1.强制缓存

  • [1]定义
    • 强制缓存就是说在第一次访问服务器获取到数据之后,在过期时间以内不会去重复请求,而是通过浏览器缓存拿去数据;
    • 过期时间:在响应头中存在一个属性
      • http1.1版本 :强制缓存通过Cache-Control来实现
        • Cache-Control存在多个属性一般使用 max-age设置时间
          • max-age:缓存的资源将会在xxx秒后过期;
      • http1.0版本中:通过expires来实现;
        • expires标是未来资源会过期的时间;
      • 注:为了兼容性,两个版本的强制缓存都会被实现,http 1.1 版本的实现优先级会高于 http 1.0 版本的实现;
      • 状态码200
    • 获取数据:在有效期时间内,浏览器会直接在本地缓存中读取数据,若是超出时间,浏览器会重新发送请求,获取资源!
  • [2]举例说明
    • 当我们在发送请求获取图片(图片验证码)的时候,图片一般使用的是强制缓存;
      • 也就是说,当服务器中的数据发生了改变,我们获取的数据还是原来的!
      • 原因:因为浏览器在资源的有效期内,并不会向服务器发送请求(不会直到数据发生了改变)
      • 解决:
        • 使用路经拼接时间戳,使url不同,浏览器会发送数据;
        • 使用post请求,因为post请求不会发生强制缓存的现象;

实例-图片的强制缓存

需求:我们在进行登录的时候使用的验证码为图片格式,当点击切换时发现 请求发送了,但是图片没有更换。

原因:该请求具有强制缓存。get请求+请求地址不变 

 解决:

  • 可以修改请求的方式,如改为post(但是没有必要)
  • 可以在url后面拼接一个参数,参数值为时间戳,保证请求地址发生改变,这样浏览器就会去发送请求而不是使用本地的缓存了。

2.协商缓存

  • 定义:协商缓存每次获取数据都会向服务器通信,并且会增加缓存标识。
  • 步骤
    • 第一次请求服务器,服务器会返回资源,并且返回一个资源缓存标识,一起存储到浏览器缓存数据库;
    • 第二次请求服务器,浏览器将缓存标识发送给服务器;
    • 服务器拿到标识后检查标识是否匹配;
      • 匹配:返回304状态码,表示资源没有更新,浏览器读取本地缓存中的数据;
      • 不匹配:表示资源已经更新,会将新的数据与新的标识一起返回到浏览器;
  • 版本
    • 在http1.1版本
      • 第一次发送请求:服务器通过Etag来设置响应头的标识;
        • 存储到缓存中;
      • 第二次发送请求:服浏览器将信息放在If-None-Match中去访问服务器;
        • 相同,返回304,表示资源没有更改;
    • 在http1.0版本
      • 第一次发送请求,通过Last-Modified来设置响应头表示,将资源最后修改时间填入;
      • 第二次请求时:浏览器将If-Modified-Since中携带的时间与资源修改时间做对比
        • 一致,返回状态码304,读取本地资源;
        • 不一致,表示资源已经更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值