http强缓存 | 青训营笔记

49 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

http缓存作用

http缓存,对于前端的性能方面来讲,是非常关键的,从缓存中读取数据和直接向服务器请求数据的速度是完全不一样的。我们最熟悉的应该是http服务器响应返回状态码304,304代表告诉浏览器,本地有缓存数据,可直接从本地获取。

缓存分类

http缓存根据浏览器是否向浏览器发起请求来分为强缓存和协商缓存

强缓存

强缓存的意思就是不再向服务器发起请求的缓存,也就是本地强制缓存。浏览器想要获取特定数据的时候,首先会检查一下本地的缓存是否存在该数据,如果存在,就直接在本地获取了,如果不存在,就向服务器请求该数据

那么问题来了?如果我想使用强缓存,怎么判断缓存数据什么时候失效呢? 在响应头的header中,有两个字段来控制强缓存

expires:

取值是GMT格式的数据,例如:Sun, 22 Jan 2023 15:11:21 GMT

浏览器会根据这个时间跟本地的时间来对比,判断资源是否过期。

这个字段存在一个问题就是,如果我手动改变了电脑的时间,那么就会出现问题(http1.0)。为了解决这个问题,http1.1退出了cache-control这个字段

cache-control

  • private(默认值):该资源只能被浏览器缓存
  • public:只要为资源设置了public,浏览器可以缓存,代理服务器也可以缓存
  • max-age=xxx: 单位是秒,存储的最大周期,相对于最初请求的时间
  • no-store:不使用任何缓存,直接向服务器发起请求
  • no-cache:绕开浏览器缓存(每次发起请求不会询问浏览器缓存),而是直接向服务器确认该缓存是否过期。(协商缓存验证)
  • must-revalidate:一旦资源过期,在成功向原始服务器验证之前,不能使用