推荐答案
Cache-Control
Cache-Control
是 HTTP/1.1 中用于控制缓存行为的头字段。它可以通过设置不同的指令来控制缓存的行为,例如 max-age
、no-cache
、no-store
等。
max-age=<seconds>
:指定资源的最大缓存时间,单位为秒。例如max-age=3600
表示资源可以在缓存中存储 1 小时。no-cache
:强制客户端在使用缓存前向服务器验证资源的有效性。no-store
:禁止缓存存储任何响应内容,通常用于敏感数据。
Expires
Expires
是 HTTP/1.0 中用于指定资源过期时间的头字段。它指定了一个具体的日期和时间,表示在此时间之前,资源可以被缓存使用。
- 例如
Expires: Wed, 21 Oct 2025 07:28:00 GMT
表示资源在 2025 年 10 月 21 日之前可以被缓存使用。
Last-Modified
Last-Modified
是服务器返回的资源最后修改时间的头字段。客户端可以通过 If-Modified-Since
请求头将上次获取资源的时间发送给服务器,服务器会根据资源的最后修改时间判断是否需要返回新的内容。
- 例如
Last-Modified: Wed, 21 Oct 2020 07:28:00 GMT
表示资源最后修改时间为 2020 年 10 月 21 日。
ETag
ETag
是服务器返回的资源唯一标识符的头字段。它是一个字符串,通常由服务器根据资源内容生成。客户端可以通过 If-None-Match
请求头将上次获取资源的 ETag 发送给服务器,服务器会根据 ETag 判断资源是否发生变化。
- 例如
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
表示资源的唯一标识符。
本题详细解读
Cache-Control 与 Expires 的区别
Cache-Control
是 HTTP/1.1 的产物,提供了更灵活的缓存控制方式,支持多个指令。Expires
是 HTTP/1.0 的产物,只能指定一个具体的过期时间,且依赖于客户端和服务器的时钟同步。
Last-Modified 与 ETag 的区别
Last-Modified
是基于时间的缓存验证机制,依赖于资源的最后修改时间。ETag
是基于内容的缓存验证机制,依赖于资源的唯一标识符,能够更精确地判断资源是否发生变化。
使用场景
Cache-Control
和Expires
通常用于控制资源的缓存时间,减少不必要的请求。Last-Modified
和ETag
通常用于缓存验证,确保客户端获取的资源是最新的。
最佳实践
- 在现代 Web 应用中,推荐优先使用
Cache-Control
来控制缓存行为,因为它提供了更丰富的指令和更灵活的配置。 - 对于缓存验证,推荐使用
ETag
,因为它能够更精确地判断资源是否发生变化,避免因时间同步问题导致的缓存失效。