HTTP缓存有哪些方案

111 阅读2分钟

首先上图

Snipaste_2023-02-05_11-07-41.png

HTTP 缓存分两种

  • HTTP 1.1 时代

  1. HTTP 1.1 时代,只需要在文件的响应头写上 Cache-Control:max-age=3600 就会自动缓存 1 小时,也就是说在这一个小时内,再次访问同样的 url路径查询参数,将不会再发请求。
  2. 假如这个时间到期了,这个缓存还能用吗?答案:不知道,得去问一下。
  3. 在响应头中可以写 Etag:"ABC",这是这个文件的特征值,等缓存时间到期了,浏览器会去问这个网站,含有"ABC"这个特征值的这个文件要不要删。
  4. 这时浏览器会向服务器发一个请求,if-None-Match:"ABC",服务器会返回状态码:304 或 200,如果是 304,就表示这个缓存还能用,不用删,200 则表示需要删除这个缓存,请求最新的文件,一般返回 200 状态码时,会附带一个 body,为最新的内容。
  • HTTP 1.0 时代

  1. HTTP 1.0 时代,用的是 Expires:Wed,21 Oct 2015 02:30:00 GMT,但是这会有个问题,如果用户电脑的时间是错乱的,这个时间就会失效。
  2. 特征值则是用 Last-Modified:Wed,21 Oct 2015 01:00:00 GMT,即最后一次更新的时间。
  3. 在缓存失效的时候,浏览器就会问 if-Modified-Since:Wed,21 Oct 2015 01:00:00 GMT,我拿到最后一次的更新时间是这个,需要删除缓存吗。
  4. 但是这里会有个问题,更新时间的精度太粗了,如果有一秒钟改了多次的文件就不能区分了。
  5. 返回的状态码与 HTTP 1.1 相同。