请解释什么是 HTTP 缓存?如何配置 HTTP 缓存策略?

推荐答案

什么是 HTTP 缓存?

HTTP 缓存是一种通过存储资源的副本,以便在后续请求中快速响应的机制。它可以减少服务器负载、降低网络延迟,并提升用户体验。HTTP 缓存通常分为两种类型:强缓存协商缓存

  • 强缓存:浏览器直接从本地缓存中获取资源,而不需要与服务器进行通信。强缓存通过 Cache-ControlExpires 响应头来控制。
  • 协商缓存:浏览器在请求资源时,会向服务器发送请求,服务器通过 ETagLast-Modified 响应头来判断资源是否已更新。如果资源未更新,服务器返回 304 状态码,浏览器使用本地缓存。

如何配置 HTTP 缓存策略?

HTTP 缓存策略主要通过设置 HTTP 响应头来配置:

  1. Cache-Control:这是最常用的缓存控制头,可以设置缓存的最大有效期、是否允许缓存等。常见指令包括:

    • max-age=<seconds>:资源在缓存中的最大存储时间(秒)。
    • no-cache:每次请求都需要向服务器验证资源是否更新。
    • no-store:禁止缓存资源。
    • public:允许所有用户(包括代理服务器)缓存资源。
    • private:仅允许客户端缓存资源。
  2. Expires:指定资源的过期时间(绝对时间),优先级低于 Cache-Control

  3. ETag:资源的唯一标识符,用于协商缓存。服务器通过比较 ETag 来判断资源是否更新。

  4. Last-Modified:资源的最后修改时间,用于协商缓存。

示例配置:


本题详细解读

HTTP 缓存的工作原理

  1. 强缓存

    • 浏览器首次请求资源时,服务器返回资源并附带 Cache-ControlExpires 头。
    • 浏览器根据这些头信息将资源缓存到本地。
    • 后续请求时,浏览器会先检查缓存是否有效。如果有效,则直接使用缓存资源,无需与服务器通信。
  2. 协商缓存

    • 如果强缓存失效,浏览器会向服务器发送请求,并附带 If-None-Match(基于 ETag)或 If-Modified-Since(基于 Last-Modified)头。
    • 服务器根据这些头信息判断资源是否更新。如果未更新,返回 304 状态码,浏览器使用本地缓存;如果已更新,返回新资源。

缓存策略的选择

  • 对于静态资源(如图片、CSS、JS 文件),通常使用强缓存并设置较长的 max-age
  • 对于动态资源(如 API 响应),通常使用协商缓存或 no-cache,以确保获取最新数据。

注意事项

  • 缓存策略需要根据业务需求灵活调整,避免缓存过期或缓存污染问题。
  • 使用 ETag 时,确保服务器生成的标识符是唯一的且能准确反映资源的变化。
  • 在开发环境中,建议禁用缓存或使用 no-cache,以便及时获取最新资源。
纠错
反馈