【问题标题】:Does RFC 5988 allow whitespace in the HTTP Link header?RFC 5988 是否允许 HTTP 链接标头中的空格?
【发布时间】:2018-06-20 03:32:43
【问题描述】:

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

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

本规范使用RFC 822 中定义的增强巴科斯-瑙尔形式 (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"

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

【问题讨论】:

    标签: http http-headers bnf rfc822 rfc5988


    【解决方案1】:

    这是允许的; 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 节)。

    【讨论】:

    • 在我接受这个答案之前,你能引用允许空格的确切部分吗?我没看到。是否“空白仅在连续行的缩进用于指示跨越多行的规则定义时才有意义”?
    猜你喜欢
    • 2013-07-02
    • 1970-01-01
    • 2013-04-24
    • 2013-05-05
    • 1970-01-01
    • 2012-04-10
    • 2021-10-29
    • 2014-11-29
    • 2017-04-16
    相关资源
    最近更新 更多