跳到主要内容

HTTP 缓存

  • http缓存是在1.1版本加入进来的

  • 和缓存有关的请求头:

    • Expries:基本不使用,可以忽略
    • Cache-Control值及其含义:
      • no-cache:表示每次请求都要向服务器发送请求,不能使用本地缓存。
      • no-store:表示不缓存任何内容,每次请求都要向服务器发送请求,不能使用本地缓存。
      • max-age:表示缓存的最大有效时间,单位为秒。例如max-age=3600表示缓存1小时;max-age=0则表示不使用缓存;
      • s-maxage:表示共享缓存的最大有效时间,只在代理服务器中生效。例如s-maxage=3600表示缓存1小时。
      • public:表示响应可以被任何中间节点(如代理服务器)缓存。
      • private:表示响应只能被客户端缓存,不能被中间节点(如代理服务器)缓存。
      • must-revalidate:表示缓存过期后必须向服务器重新验证,如果验证失败,则不能使用缓存。
      • proxy-revalidate:表示缓存过期后必须向代理服务器重新验证,如果验证失败,则不能使用缓存。
      • no-transform:表示中间节点不能对响应进行转换,如压缩、解压缩等。
      • immutable:表示响应内容不会再被修改,可以永久缓存。
  • 缓存分为强制缓存和协商缓存

  • 强制缓存:

    • 状态码:200
    • 使用的缓存:硬盘缓存和内存缓存;
  • 协商缓存:

    • 状态码:304/200
    • 使用
  • 当本地的缓存未过期,则使用本地的缓存(200状态码),这一步称之为强制缓存,优先级也最高;若本地的缓存已过期,则询问服务器进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存成功,则客户端继续使用缓存结果(304状态码),若协商不成功,则服务器会返回新的结果,且状态码为200,并将新的返回结果存入浏览器的缓存中。

  • 图片 参考博客