关于浏览器的缓存机制

通用首部字段文

  • Cache-Control控制缓存行为

  • Prama值为"no-cache"时禁用缓存

请求首部字段

  • If-Match比较ETag是否一致

  • If-None-Match比较ETag是否不一致

  • If-Modified-Since比较资源最后更新时间是否一致

  • If-Unmodifined-Since比较资源最后更新时间是否一致

响应首部总段

  • ETag资源的匹配信息

实体首部字段

  • Expires实体主体过期时间

  • Last-Modified资源的最后一次修改时间

缓存的分类
强缓存:通过响应头来实现,使得浏览器每次发出的请求资源都是来自服务器而不是用缓存。
  • Expires(http1.0的产物)资源过期的时间,由服务器返回,受限于本地时间,如果本地时间修改那么可能会造成缓存失败,绝对时间。

  • Cache-Control(http1.1)相对时间。

  • no-cache可以缓存到本地,必须浏览器和服务器再验证,在验证之前是不可用的;
  • no-store禁止缓存到本地;
  • public可以被所有用户共享,包括代理服务器等;
  • private只能被终端浏览器缓存。

Cache-Control的优先级会高于Expires

  • 应用场景
  1. 频繁变动的资源

  2. 缓存适用的是对数据一致性要求比较高的项目,比如金钱或者重要数据。

协商缓存:当请求没有命中强缓存,那么久会发送一个请求到服务器,由服务器来确定该资源是否可用。
  • Last-Modified资源的最后一次修改时间,当浏览器发送请求的时候就会发送一个请求头 If-Modified-Since(上次服务器响应头中Last-Modified的值),询问服务器该日期后资源是否有更新,有的话就会发送新的资源。

但是如果用户打开过本地资源甚至修改过,那么就又扯出来一个新的响应头,ETag

  • ETag(http1.1的产物)相当于人的指纹一样,值是唯一的,只要是本地资源发生变化,那么该值都会发生变化。当浏览器发送新的请求的时候,就会发送一个请求头If-None-Match(上次服务器响应头中的ETag),询问该资源的ETag是否发生有更新,有的话就会发送新的资源。

304状态码就是基于这个

ETag的优先级会高于Last-Modified

最后

大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值