跳到主要内容

1. 引言

现代 HTTP 部署通常使用多层缓存. 例如, 网站可能在源服务器自身上使用缓存; 可能在与源服务器相同的网络中部署缓存层; 可能使用一个或多个分布在整个 Internet 上的 CDN; 也可能从浏览器缓存中获益.

由于通常需要分别控制这些不同类别的缓存, 因此必须有某种方式将缓存指令定向到它们. 例如, 如果发布者拥有一种机制, 可以使其有关系的缓存 (例如 CDN 缓存) 中的内容失效, 则发布者可能更愿意为该缓存分配更宽松的缓存策略, 同时仍希望限制其他缓存的行为.

HTTP Cache-Control 响应头字段 (在 [HTTP-CACHING] 的 Section 5.2 中定义) 被广泛用于指示缓存行为. 但是, 它的区分度相对较低; 虽然某些缓存指令 (例如 s-maxage) 面向特定类别的缓存 (对于 s-maxage, 即共享缓存), 但在所有现有缓存指令中并不一致地提供目标化能力 (例如 stale-while-revalidate). 随着缓存扩展数量和潜在目标数量增长, 这一点尤其成问题.

一些实现定义了临时控制机制来克服此问题, 但它们的互操作性较低. Section 2 定义了一个使用 HTTP 响应头进行目标化缓存控制的标准框架, Section 3 定义了这样一个头: CDN-Cache-Control 响应头字段.

1.1. 记法约定

当且仅当本文档中的关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" 和 "OPTIONAL" 以此处所示的全大写形式出现时, 应按 BCP 14 [RFC2119] [RFC8174] 中的描述解释.