跳到主要内容

1. 引言 (Introduction)

HTTP 通常用于分布式信息系统,其中可以通过使用响应缓存(response cache)来提升性能。本文档定义了 HTTP/1.1 中与缓存和重用响应消息(response messages)相关的部分。

HTTP 缓存(cache)是响应消息的本地存储,也是控制其中消息的存储、检索和删除的子系统。缓存存储可缓存的响应,以减少后续等价请求(request)的响应时间和网络带宽消耗。任何客户端(client)或服务器(server)都可以(MAY)使用缓存,但作为隧道(tunnel)运行的服务器不能使用缓存。

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

HTTP/1.1 中缓存的目标是通过重用先前的响应消息来满足当前请求,从而显著提升性能。如果存储的响应(stored response)可以在不进行"验证"(validation,即向源服务器(origin server)检查缓存的响应对该请求是否仍然有效)的情况下重用,则该响应被视为"新鲜的"(fresh),如第 4.2 节所定义。因此,新鲜响应每次被重用时都能降低延迟和网络开销。当缓存的响应不新鲜时,如果它可以通过验证重新变新鲜(第 4.3 节),或者源服务器不可用(第 4.2.4 节),它仍然可能可以重用。

1.1. 一致性和错误处理 (Conformance and Error Handling)​

本文档中的关键词 "MUST"(必须)、"MUST NOT"(必须不)、"REQUIRED"(要求)、"SHALL"(应)、"SHALL NOT"(不应)、"SHOULD"(应该)、"SHOULD NOT"(不应该)、"RECOMMENDED"(推荐)、"MAY"(可以)和 "OPTIONAL"(可选)应按照 [RFC2119] 中的描述解释。

关于一致性标准和错误处理的注意事项在 [RFC7230] 的第 2.5 节中定义。

1.2. 语法表示 (Syntax Notation)​

本规范使用 [RFC5234] 的扩充巴科斯-诺尔范式(Augmented Backus-Naur Form,ABNF)表示法,并配合 [RFC7230] 第 7 节中定义的列表扩展(list extension),该扩展允许使用 "#" 操作符紧凑地定义逗号分隔的列表(类似于 "*" 操作符表示重复的方式)。附录 B 描述了从其他文档导入的规则。附录 C 展示了所有列表操作符展开为标准 ABNF 表示法后的汇总语法。

1.2.1. 增量秒数 (Delta Seconds)​

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

delta-seconds = 1*DIGIT

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

注意: 值 2147483648 是出于历史原因存在的,它实际上表示无穷大(超过 68 年),并不要求以二进制形式存储;即使计算所用的算术类型不能直接表示该数字,实现(implementation)也可以在发生任何溢出时将其作为固定字符串生成。这里重要的是溢出必须被检测到,并且在后续计算中不会被当作负值处理。