RFC 5988 是否允许在 HTTP 链接标头中使用空格



RFC 5988 的第 5 节定义了链接标头的语法,如下所示:

Link           = "Link" ":" #link-value
link-value     = "<" URI-Reference ">" *( ";" link-param )

此规范使用 RFC 822 中定义的增强型 Backus-Naur 表单 (BNF(。

如果正确理解BNF,规范不允许在分号(;(和link-param之间留空格。但是,在第 5 节中出现的示例中,两个元素之间存在空格:

Link: <http://example.com/TheBook/chapter2>; rel="previous";
      title="previous chapter"
Link: </>; rel="http://example.net/foo"

我还在Github的API中观察到链接标头中的空格,我认为这是更符合标准的API之一:

$ curl -s -I https://api.github.com/users/mitsuhiko/repos
...
Link: <https://api.github.com/user/7396/repos?page=2>; rel="next", <https://api.github.com/user/7396/repos?page=7>; rel="last"

空格应该被允许吗?除了这些例子之外,我找不到任何提供证据的东西。

这是允许的;RFC 5988 使用 RFC 2616 定义的 ABNF,其中对线性空白具有特殊规则。请参阅 https://www.greenbytes.de/tech/webdav/rfc5988.html#rfc.section.2.p.2 和 https://www.greenbytes.de/tech/webdav/rfc2616.html#rfc.section.2.1:

此规范描述的语法是基于单词的。除了 如有其他说明,可以包含线性空白 (LWS( 在任意两个相邻的单词(标记或引号字符串(之间,以及 相邻单词和分隔符,而不改变解释 一个字段。必须至少存在一个分隔符(LWS 和/或分隔符( 在任意两个令牌之间(对于下面"令牌"的定义(,因为 否则,它们将被解释为单个令牌。

无论如何,FWIW,RFC 5988 在几个月前已经过时了;请参阅 RFC 8288 (https://www.greenbytes.de/tech/webdav/rfc8288.html( 了解最新和最伟大的(特别是第 3 节(。

相关内容

  • 没有找到相关文章

最新更新