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"
空白是否应该被允许?除了这些例子之外,我找不到任何提供证据的方法。
答案 0 :(得分:2)
允许; 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) 在任何两个相邻的单词(token或quoted-string)之间,以及之间 相邻的单词和分隔符,没有改变的解释 一个领域。必须至少存在一个分隔符(LWS和/或分隔符) 在任何两个令牌之间(用于&#34;令牌&#34;的定义),因为 否则它们将被解释为单个令牌。
FWIW,RFC 5988几个月前已经过时了;请参阅RFC 8288(https://www.greenbytes.de/tech/webdav/rfc8288.html)了解最新和最好的(特别是第3节)。