If-Range HTTP header 中的 ETag 与日期
ETag vs. date in If-Range HTTP header
根据 RFC7233,If-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 形式是为了让之前的文本更清晰,但不幸的是,这次它没有达到它所寻求的清晰度。
根据 RFC7233,If-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 形式是为了让之前的文本更清晰,但不幸的是,这次它没有达到它所寻求的清晰度。