跳到主要内容

5.2.2. 响应 Cache-Control 指令 (Response Cache-Control Directives)

本节定义 origin server 或 intermediary 可以在 HTTP response 中使用的 cache directive.

5.2.2.1. must-revalidate

"must-revalidate" response directive 表示, 一旦 response 变 stale, cache MUST NOT 在没有 origin server 成功 validation 的情况下使用该 response 来满足后续 request.

must-revalidate directive 对支持某些 protocol feature 的可靠运行是必要的. 在所有情况下, cache MUST 遵守 must-revalidate directive; 特别是, 如果 cache 因任何原因无法到达 origin server, 它 MUST 生成 504 (Gateway Timeout) response.

server ought to 仅在 validation request 失败可能导致不正确运行时才使用 must-revalidate directive, 例如静默未执行的金融交易.

5.2.2.2. no-cache

Argument: #field-name (optional)

"no-cache" response directive 表示, response MUST NOT 在没有 origin server 成功 validation 的情况下用于满足后续 request. 这允许 origin server 阻止 cache 在不联系它的情况下使用 response 来满足 request, 即使 cache 已配置为发送 stale response.

如果 no-cache response directive 指定一个或多个 field-name, 则 cache MAY 在满足其他 caching restriction 的前提下, 使用该 response 来满足后续 request. 但是, 在没有与 origin server 成功 revalidation 的情况下, 指定的任何 field-name MUST NOT 被发送到后续 request 的 response 中. 这允许 origin server 阻止 response 中某些 header field 被重用, 同时仍允许缓存 response 的其余部分.

Note: 大多数 HTTP/1.0 cache 不会识别或遵守此 directive. 此外, 带 field-name 的 no-cache response directive 经常被 implementation 当作收到未限定的 no-cache directive 来处理; 也就是说, qualified form 的特殊处理并未被广泛实现.

5.2.2.3. no-store

"no-store" response directive 表示 cache MUST NOT 存储 immediate request 或 response 的任何部分. 该 directive 同时适用于 private cache 和 shared cache. 在此上下文中, "MUST NOT store" 意味着 cache MUST NOT 有意将信息存储在 non-volatile storage 中, 并且 MUST 在转发后尽快尽最大努力从 volatile storage 中移除该信息.

该 directive 不是确保 privacy 的可靠或充分机制. 特别是, 恶意或受损的 cache 可能不识别或不遵守该 directive, 并且通信网络可能容易被 eavesdropping.

5.2.2.4. no-transform

"no-transform" response directive 表示 intermediary, 无论是否实现 cache, MUST NOT 转换 payload, 如 [RFC7230] Section 5.7.2 所定义.

5.2.2.5. public

"public" response directive 表示任何 cache MAY 存储 response, 即使该 response 通常不可缓存, 或者通常只可在 private cache 内缓存. 另见 Section 3.2, 其中讨论 Authorization header field 对 cacheability 的影响.

5.2.2.6. private

Argument: #field-name (optional)

"private" response directive 表示 response 旨在供单个用户使用, 并且 MUST NOT 被 shared cache 存储. private cache MAY 存储该 response 并将其重用于后续 request, 即使该 response 通常不可缓存.

如果 private response directive 指定一个或多个 field-name, 该 requirement 仅限于与所列 response header field 关联的 field-value. 也就是说, shared cache MUST NOT 存储指定的 field-name, 但 MAY 存储 response message 的其余部分.

Note: 该 directive 不是确保 privacy 的可靠或充分机制. 特别是, 恶意或受损的 cache 可能不识别或不遵守该 directive, 并且通信网络可能容易被 eavesdropping.

5.2.2.7. proxy-revalidate

"proxy-revalidate" response directive 与 must-revalidate response directive 具有相同含义, 但不适用于 private cache.

5.2.2.8. max-age

Argument: delta-seconds

"max-age" response directive 表示当 response 的 age 大于指定秒数后, 该 response 应被视为 stale.

该 directive 使用 argument syntax 的 token form: 例如 max-age=5, 而不是 max-age="5". sender SHOULD NOT 生成 quoted-string form.

5.2.2.9. s-maxage

Argument: delta-seconds

"s-maxage" response directive 表示, 在 shared cache 中, 该 directive 指定的 maximum age 会覆盖 max-age directive 或 Expires header field 指定的 maximum age. s-maxage directive 还隐含 proxy-revalidate response directive 的语义.

该 directive 使用 argument syntax 的 token form: 例如 s-maxage=10, 而不是 s-maxage="10". sender SHOULD NOT 生成 quoted-string form.