跳到主要内容

1. 引言 (Introduction)

超文本传输协议 (HTTP) 是一种无状态的应用层请求/响应协议, 它使用可扩展语义和自描述消息, 与基于网络的超文本信息系统进行灵活交互. HTTP 常用于分布式信息系统, 在这些系统中使用响应缓存 (response cache) 可以提升性能. 本文档定义了 HTTP 中与缓存和重用响应消息相关的方面.

HTTP "缓存 (cache)" 是响应消息的本地存储, 也是控制其中消息的存储, 检索和删除的子系统. 缓存存储可缓存响应, 以减少未来等价请求的响应时间和网络带宽消耗. 除了充当隧道 (tunnel) 时以外, 任何客户端或服务器 MAY 使用缓存 (见 [HTTP] 第 3.7 节).

"共享缓存 (shared cache)" 是存储响应以供多个用户重用的缓存; 共享缓存通常作为中介 (intermediary) 的一部分部署, 但并非总是如此. 相比之下, "私有缓存 (private cache)" 专用于单个用户; 它们通常作为用户代理 (user agent) 的组件部署.

HTTP 缓存的目标是通过重用先前的响应消息来满足当前请求, 从而显著提升性能. 如第 4.2 节所定义, 如果缓存可以在不进行"验证 (validation)"的情况下重用已存储响应, 即不需要向源服务器检查该缓存响应对此请求是否仍然有效, 则缓存认为该已存储响应是"新鲜 (fresh)"的. 因此, 每当缓存重用一个新鲜响应时, 都可以减少延迟和网络开销. 当缓存响应不再新鲜时, 如果验证可以使其重新变得新鲜 (第 4.3 节), 或者源服务器不可用 (第 4.2.4 节), 它仍然可能可被重用.

本文档废止 RFC 7234, 变更摘要见 Appendix B.

1.1 要求记法 (Requirements Notation)

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

[HTTP] 第 2 节定义了一致性准则, 并包含与错误处理有关的考虑事项.

1.2 语法记法 (Syntax Notation)

本规范使用 [RFC5234] 的增强巴科斯-诺尔范式 (ABNF) 记法, 并用 [RFC7405] 中定义的大小写敏感字符串记法进行扩展.

本规范还使用 [HTTP] 第 5.6.1 节中定义的列表扩展, 该扩展允许使用 "#" 操作符紧凑地定义逗号分隔列表, 类似于 "*" 操作符表示重复的方式. Appendix A 给出了汇总语法, 其中所有列表操作符都已展开为标准 ABNF 记法.

1.2.1 导入的规则 (Imported Rules)

以下核心规则按 [RFC5234] Appendix B.1 中的定义通过引用纳入: DIGIT (十进制 0-9).

[HTTP] 定义了以下规则:

HTTP-date     = `<HTTP-date, see [HTTP], Section 5.6.7>`
OWS = `<OWS, see [HTTP], Section 5.6.3>`
field-name = `<field-name, see [HTTP], Section 5.1>`
quoted-string = `<quoted-string, see [HTTP], Section 5.6.4>`
token = `<token, see [HTTP], Section 5.6.2>`

1.2.2 增量秒 (Delta Seconds)

delta-seconds 规则指定一个非负整数, 表示以秒为单位的时间.

delta-seconds  = 1*DIGIT

解析 delta-seconds 值并将其转换为二进制形式的接收方应使用至少具有 31 位非负整数范围的算术类型. 如果缓存收到的 delta-seconds 值大于其能够表示的最大整数, 或者后续任何计算发生溢出, 缓存 MUST 将该值视为 2147483648 (2^31), 或视为它能够方便表示的最大正整数.

Note: 值 2147483648 因历史原因而存在, 表示无穷大 (超过 68 年), 且不需要以二进制形式存储; 即使计算使用的算术类型无法直接表示该数字, 实现也可以将其生成为字符串. 这里重要的是检测到溢出, 而不是在后续计算中将其视为负值.