浏览器缓存

109 阅读2分钟

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战

为什么需要缓存?

当浏览器访问网站时,会从服务器上拉取 html、js、css等资源,而这些资源变动一般并不大,因此,浏览器可以把这些静态资源缓存起来。

使用浏览器缓存的好处?

  1. 减少通信时间,提高性能,提升用户的体验。
  2. 减少通信流量,使用浏览器缓存减少了浏览器向服务器发送请求的次数,降低了带宽成本。

浏览器缓存的机制是什么样的?

浏览器在向服务器请求之前,会先判断缓存是否存在、缓存是否过期,如果缓存不存在或者是缓存已经过期了,则发网络请求给服务器,这个时候会由服务器决策是否使用缓存,这个我们叫它服务器协商缓存。如果浏览器判断缓存没有过期,则直接从缓存读取,返回 200 from cache 。

怎么判断浏览器缓存是否过期的呢?

相关的有两个响应头参数: expires 和 cache-control。

expires: expires 在 HTTP 1.0 使用,指缓存的过期时间,允许在这个时间之前不用向服务器请求。服务器的时间和浏览器的时间可能不一致,因此后续又添加了一个参数叫 cache-control。

cache-control:

字段名作用
no-cache强制向源服务器再次验证
no-store不缓存请求或响应的任何内容
max-age = [ 秒]响应的最大Age值

image.png

如上图,是访问掘金首页浏览器的一个请求,响应头中有 cache-control: max-age=31536000 ,表示如果缓存资源的缓存时间小于 31536000 秒,则缓存是有效的。

当指定 max-age 值为 0,那么浏览器通常需要将请求转发给服务器。

如果响应头同时有 expires 和 cache-control,那么优先处理 cache-control ,expires 会被忽略掉。