跳到主要内容

4. stale-if-error Cache-Control Extension

stale-if-error Cache-Control 扩展指令表示, 当发生错误时, 无论其他新鲜度信息如何, 都可以使用已缓存的过期响应来满足请求.

stale-if-error = "stale-if-error" "=" delta-seconds

当作为请求中的 Cache-Control 扩展指令使用时, 其适用范围是它所在的请求; 当作为响应中的 Cache-Control 扩展指令使用时, 其范围适用于其所在的已缓存响应所对应的任何请求.

其值表示过期程度的上限; 当已缓存响应的过期时间超过所指示的量时, 在没有其他信息的情况下, 不应使用该已缓存响应来满足请求.

在此上下文中, 错误是指任何会导致返回 500, 502, 503 或 504 HTTP 响应状态码的情况.

注意, 该指令不影响新鲜度; 被使用的过期缓存响应在发送时, 仍应明显表现为过期 (即按照 HTTP 要求, 具有非零的 Age 头部和 warning 头部).

4.1. 示例 (Example)

包含以下内容的响应:

HTTP/1.1 200 OK
Cache-Control: max-age=600, stale-if-error=1200
Content-Type: text/plain

success

表示它在 600 秒内是新鲜的 (fresh), 并且在变为过期之后的额外 1200 秒内, 如果遇到错误, 可以使用它.

因此, 如果缓存在 900 秒后尝试验证并遇到:

HTTP/1.1 500 Internal Server Error
Content-Type: text/plain

failure

则可以改为返回成功的响应:

HTTP/1.1 200 OK
Cache-Control: max-age=600, stale-if-error=1200
Age: 900
Content-Type: text/plain

success

当 Age 大于 1800 秒后 (即它已经过期 1200 秒), 缓存必须将错误消息透传出去.

HTTP/1.1 500 Internal Server Error
Content-Type: text/plain

failure