浏览器缓存机制

参考文章:https://mp.weixin.qq.com/s/d2zeGhUptGUGJpB5xHQbOA 总结

1. 什么是浏览器缓存

  • 描述:当用户首次访问某个网站时,浏览器首先请求浏览器缓存,浏览器缓存没有该网站的缓存,于是浏览器直接请求网站,拿到网站返回数据后,存入浏览器缓存。
  • 作用:缓存网站信息,减少网络开销,加快访问速度

2. 浏览器缓存的类型

2.1 强制缓存

浏览器访问任何网站前强制先访问浏览器缓存。

2.2 协商缓存

强制缓存失效时,浏览器携带上次请求返回的过期时间或者上次请求返回的数据Etag,服务端发现到了过期时间或者内容Etag变化,就不使用浏览器缓存,返回最新数据;如果没有到过期时间或者内容Etag没有变化,就继续使用浏览器缓存。

3. HTTP 请求头字段

Expires

Expires是HTTP/1.0使用,其值为服务器返回该请求结果缓存的到期时间,即再次发起该请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。

Cache-Control

由于Expires校验原理是比较客户端和服务端的绝对时间,如果时区不同、或者一方时间不准确,用Expires判断过期不够准确。

Cache-Control可填写字段:

  • public:所有内容都将被缓存(客户端和代理服务器都可缓存)
  • private:所有内容只有客户端可以缓存,Cache-Control的默认取值
  • no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
  • no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
  • max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效
    max-age表示相对时间,客户端在xxx秒后再次请求服务器,会发现缓存失效。

若同时存在cache-control和expires,只有cache-control生效

Last-Modified | If-Modified-Since

服务器可以通过配置这个响应头,来向浏览器发送一个数据上次被修改的时间标签,例如:Last-Modified:Wed, 15 Jul 2020 02:54:16 GMT

Etag

内存缓存&硬盘缓存

在浏览器中,浏览器会在js和图片等文件解析执行后直接存入内存缓存中,那么当刷新页面时只需直接从内存缓存中读取(from memory cache);而css文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache)。

4. 总结

强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存,主要过程如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值