1. 引言 (Introduction)
HTTP 通常用于分布式信息系统, 其中可以通过使用 response cache 来提升性能. 本文档定义 HTTP/1.1 中与缓存和重用 response message 相关的部分.
HTTP cache 是 response message 的本地存储, 也是控制其中 message 的存储, 检索和删除的子系统. cache 存储可缓存的 response, 以减少后续等价 request 的响应时间和网络带宽消耗. 任何 client 或 server MAY 使用 cache, 但作为 tunnel 运行的 server 不能使用 cache.
shared cache 是存储 response 以供多个用户重用的 cache; shared cache 通常作为 intermediary 的一部分部署, 但并非总是如此. 相比之下, private cache 专用于单个用户; 它们通常作为 user agent 的组件部署.
HTTP/1.1 中缓存的目标是通过重用先前的 response message 来满足当前 request, 从而显著提升性能. 如 Section 4.2 所定义, 如果 stored response 可以在不进行 validation 的情况下重用, 即不需要向 origin server 检查 cached response 对此 request 是否仍然有效, 则该 response 被认为是 "fresh". 因此, fresh response 每次重用时都可以降低延迟和网络开销. 当 cached response 不 fresh 时, 如果它可以通过 validation 重新变 fresh (Section 4.3), 或者 origin server 不可用 (Section 4.2.4), 它仍然可能可以重用.
1.1. 一致性和错误处理 (Conformance and Error Handling)
本文档中的关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" 和 "OPTIONAL" 应按照 [RFC2119] 中的描述解释.
关于一致性标准和错误处理的注意事项在 [RFC7230] Section 2.5 中定义.
1.2. 语法表示 (Syntax Notation)
本规范使用 [RFC5234] 的 Augmented Backus-Naur Form (ABNF) 表示法, 并使用 [RFC7230] Section 7 中定义的 list extension. 该扩展允许使用 "#" 操作符紧凑地定义逗号分隔列表, 类似于 "*" 操作符表示重复的方式. Appendix B 描述从其他文档导入的规则. Appendix C 展示将所有 list operator 展开为标准 ABNF 表示法后的汇总语法.
1.2.1. 增量秒数 (Delta Seconds)
delta-seconds 规则指定一个非负整数, 表示以秒为单位的时间.
delta-seconds = 1*DIGIT
解析 delta-seconds 值并将其转换为二进制形式的 recipient 应使用至少具有 31 位非负整数范围的算术类型. 如果 cache 接收到的 delta-seconds 值大于它能够表示的最大整数, 或者其后续任何计算发生溢出, cache MUST 将该值视为 2147483648 (2^31), 或者视为它可以方便表示的最大正整数.
Note: 值 2147483648 是出于历史原因存在的, 它表示无穷大 (超过 68 年), 而不是要求以二进制形式存储; 当发生任何溢出时, 即使计算所用的算术类型不能直接表示该数字, implementation 也可以把它作为固定字符串生成. 这里重要的是已经检测到溢出, 并且后续不会把它当作负值处理.