请解释 HTTP 协议中的 Cache-Control、Expires、Last-Modified 和 ETag 头部的作用和用法

推荐答案

Cache-Control

Cache-Control 是 HTTP/1.1 中用于控制缓存行为的头部字段。它可以通过设置不同的指令来控制缓存的行为,例如 max-ageno-cacheno-store 等。

  • max-age=<seconds>:指定资源的最大缓存时间,单位为秒。
  • no-cache:强制客户端在使用缓存前向服务器验证资源的有效性。
  • no-store:禁止缓存任何响应内容。
  • public:允许任何缓存(包括代理服务器)缓存响应。
  • private:只允许客户端缓存响应,不允许代理服务器缓存。

Expires

Expires 是 HTTP/1.0 中用于指定资源过期时间的头部字段。它指定了一个具体的日期和时间,表示在此时间之前,资源可以被缓存。

  • 例如:Expires: Wed, 21 Oct 2025 07:28:00 GMT

Last-Modified

Last-Modified 是 HTTP/1.0 中用于标识资源最后修改时间的头部字段。它通常与 If-Modified-Since 请求头一起使用,用于条件请求。

  • 例如:Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT

ETag

ETag 是 HTTP/1.1 中用于标识资源版本的头部字段。它是一个唯一的字符串,通常由服务器生成,用于标识资源的特定版本。客户端可以通过 If-None-Match 请求头来验证资源的有效性。

  • 例如:ETag: "686897696a7c876b7e"

本题详细解读

Cache-Control

Cache-Control 是 HTTP/1.1 中引入的头部字段,用于更精细地控制缓存行为。相比于 ExpiresCache-Control 提供了更多的指令,可以更灵活地控制缓存策略。例如,max-age 可以指定资源在缓存中的存活时间,而 no-cache 则要求客户端在使用缓存前必须向服务器验证资源的有效性。

Expires

Expires 是 HTTP/1.0 中用于指定资源过期时间的头部字段。它通过指定一个具体的日期和时间来告诉客户端在此时间之前可以缓存资源。然而,由于 Expires 依赖于客户端和服务器的时钟同步,因此在某些情况下可能会导致缓存失效。

Last-Modified

Last-Modified 是 HTTP/1.0 中用于标识资源最后修改时间的头部字段。当客户端再次请求该资源时,可以通过 If-Modified-Since 请求头将 Last-Modified 的值发送给服务器。如果资源在 Last-Modified 之后没有被修改,服务器可以返回 304 Not Modified 状态码,告诉客户端可以使用缓存的资源。

ETag

ETag 是 HTTP/1.1 中用于标识资源版本的头部字段。它是一个唯一的字符串,通常由服务器生成,用于标识资源的特定版本。当客户端再次请求该资源时,可以通过 If-None-Match 请求头将 ETag 的值发送给服务器。如果资源的 ETag 与服务器上的 ETag 匹配,服务器可以返回 304 Not Modified 状态码,告诉客户端可以使用缓存的资源。ETag 通常比 Last-Modified 更精确,因为它可以处理资源内容变化但修改时间不变的情况。

纠错
反馈