HTTP响应头中用于控制缓存行为的字段主要包括以下几个关键的头部信息:
Cache-Control
- 这个字段是HTTP/1.1中引入的,用于精确地控制缓存的行为。它可以包含多个指令,如:
no-store
:指示缓存不应存储任何关于请求或响应的信息。no-cache
:指示缓存需要在使用任何缓存的副本前,先与源服务器进行验证。max-age=<seconds>
:指定缓存项的有效期,即从响应时间开始算起的秒数。must-revalidate
:要求缓存在数据过期后必须与源服务器进行验证才能再使用。proxy-revalidate
:类似于must-revalidate
,但是仅应用于共享缓存(例如代理服务器)。s-maxage=<seconds>
:指定共享缓存的最大年龄,即使原始响应指定了更短的max-age
。
- 这个字段是HTTP/1.1中引入的,用于精确地控制缓存的行为。它可以包含多个指令,如:
Expires
- 这个字段在HTTP/1.0中引入,用于指定响应过期的绝对时间点。它是一个GMT格式的日期/时间字符串,指定在何时之后缓存被认为是“陈旧”的。然而,在
Cache-Control
存在的情况下,Expires
的优先级较低。
- 这个字段在HTTP/1.0中引入,用于指定响应过期的绝对时间点。它是一个GMT格式的日期/时间字符串,指定在何时之后缓存被认为是“陈旧”的。然而,在
ETag
- ETag(实体标签)是一个标识响应资源版本的不透明标记。它通常用于协商缓存,即当缓存项过期后,客户端可以使用
If-None-Match
请求头将ETag发回给服务器,服务器比较后决定是否返回完整资源或发送304 Not Modified状态。
- ETag(实体标签)是一个标识响应资源版本的不透明标记。它通常用于协商缓存,即当缓存项过期后,客户端可以使用
Last-Modified
- 类似于ETag,但使用的是资源最后修改的时间戳。客户端可以使用
If-Modified-Since
请求头发送这个时间,服务器检查资源的最后修改时间,如果未发生变化则返回304 Not Modified。
- 类似于ETag,但使用的是资源最后修改的时间戳。客户端可以使用
Pragma
- 在HTTP/1.0中,
pragma:no-cache
指令与Cache-Control:no-cache
类似,但Cache-Control
在HTTP/1.1中优先级更高。
- 在HTTP/1.0中,
这些头部信息共同作用,决定了缓存如何存储、验证和使用响应数据。合理配置这些头部信息,可以显著提升Web应用的性能和用户体验,同时减轻服务器的负载。