If-Range HTTP header 中的 ETag 与日期

ETag vs. date in If-Range HTTP header

根据 RFC7233If-Range HTTP header 可以是 entity-tag 或 HTTP-date。在这种情况下,RFC 的第 3.2 节指出

A valid entity-tag can be distinguished from a valid HTTP-date by examining the first two characters for a DQUOTE.

我的问题:为什么我们需要两个个字符?由于此处不允许使用弱 entity-tag,因此我认为测试 first 字符是否为 DQUOTE 就足够了。

答案似乎是你不需要检查两个字符,只看第一个字符就足以实现 If-Range

如果查看 Apache HTTP Server 实现,您会发现它仅检查第一个字符(http_protocol.c,撰写本文时为第 477 行)。

if (if_range[0] == '"') {

我认为可以通过查看 HTTP 1.1 规范 (RFC2616) 的早期版本来解释该文本的轻微误导性措辞,它说:

The server can distinguish between a valid HTTP-date and any form of entity-tag by examining no more than two characters.

较早的说法并没有错,但与 If-Range 没有直接关系,其中只允许强 ETag。

我希望文本的 RFC7233 形式是为了让之前的文本更清晰,但不幸的是,这次它没有达到它所寻求的清晰度。