HTTP 缓存控制
文章目录

HTTP 缓存相关

  1. 强制缓存: 优先检查客户端缓存, 如果没有直接请求服务端
  2. 协商缓存: 优先检查客户端缓存的标记, 然后根据标记请求服务端看看标记是否有效
    1. 如果没有失效则返回 304 OPTION
    2. 如果失效则重新请求服务端

HTTP 缓存相关的 Header

强制缓存

  • Expires: 到期时间
  • Cache-Control: 后期代替了 Expires 这个属性, 里面设置了几个子属性:
    • private: 客户端可以缓存
    • public: 客户端和代理服务器都可以缓存
    • max-age=t: 缓存内容将在 t 秒后失效
    • no-cache: 需要使用协商缓存来验证缓存数据
    • no-store: 所有内容都不会缓存.

协商缓存

  • Last-Modified: 服务器资源的最后修改时间
  • if-Modified-Since: 客户端的最后修改时间
    • 服务器接到这个请求后, 首先检查服务器上最后修改时间
      • 如果服务器最后修改时间更新, 当然就返回 200 和新的资源
      • 如果服务器最后修改时间更旧, 返回 304(纯 header 不带 body) 然后让客户端直接使用缓存资源
  • if-Unmodified-Since: 客户端最后未修改时间
    • 若服务器未修改: 发送 200
    • 若服务器已修改: 发送 412
  • ETag: 资源唯一标示符
    • 若服务器未修改: 发送 200
    • 若服务器已修改: 发送 304