1

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"

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

4

1 回答 1

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) 可以包含在任何两个相邻单词(标记或引用字符串)之间,以及相邻单词和分隔符之间,而不改变字段的解释。至少一个分隔符(LWS 和/或分隔符)必须存在于任何两个标记之间(对于下面“标记”的定义),因为否则它们将被解释为单个标记。

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

于 2018-01-11T07:32:35.573 回答