RFC 5988是否允许HTTP链接头中的空格?

时间:2018-01-10 21:24:40

标签: http http-headers bnf rfc822 rfc5988

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

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中观察了Link头中的空格,我认为它是更符合标准的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"

空白是否应该被允许?除了这些例子之外,我找不到任何提供证据的方法。

1 个答案:

答案 0 :(得分:2)

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

  

本规范描述的语法是基于单词的。除了   除非另有说明,否则可以包括线性空白区域(LWS)   在任何两个相邻的单词(token或quoted-string)之间,以及之间   相邻的单词和分隔符,没有改变的解释   一个领域。必须至少存在一个分隔符(LWS和/或分隔符)   在任何两个令牌之间(用于&#34;令牌&#34;的定义),因为   否则它们将被解释为单个令牌。

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