URL中的尾随&符合法吗?

Mat*_*ard 19 url uri specifications http

像这样的网址

http://localhost/path?a=b&c=d
Run Code Online (Sandbox Code Playgroud)

很好 - 但是带有尾随&符号的同一URL的状态是什么?

http://localhost/path?a=b&c=d&
Run Code Online (Sandbox Code Playgroud)

例如,Java Servlet API允许它在Scala的Spray没有的地方(即它抛出错误).

我试图在URI语法规范中找到答案,但不确定如何解析他们的语法.

Chr*_*gan 23

URI语法规范适用于通用URI.它允许查询中的任何内容.我不知道任何实际指定&符号分隔的键=值对的规范.我认为这仅仅是惯例.我知道PHP,例如,提供了使用不同分隔符的选项.但是现在,每个人在需要键值对时都会使用与号分隔的东西.您偶尔会遇到一些使用它的东西只是一个简单的字符串,例如http://example.com/?example.这完全有效.

但是,基本答案&是在查询字符串中的任何位置都有效,包括在结尾处.


解析RFC语法,或者为什么&在查询字符串中的任何位置都有效:

首先,你有

query       = *( pchar / "/" / "?" )
Run Code Online (Sandbox Code Playgroud)

(因此查询字符串由任意数量的pchar字面斜杠和问号组成.)

回去,你有

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
Run Code Online (Sandbox Code Playgroud)

还是早些时候

sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
            / "*" / "+" / "," / ";" / "="
Run Code Online (Sandbox Code Playgroud)

因此,文字&就在sub-delims其中pchar,因此它是有效的query


Mar*_*eur 6

我认为有一个不成文的规则,即所有RFC必须几乎无法理解。您不是第一个无法解析语法的人,而且-以我的拙见-Spray也失败了。

尾随的“&”号没有错。它是URI中的合法字符,用于分隔参数。尾随的“&”号可能毫无意义,但这不是无效的。喷雾(再次,仅在我看来)应该完全忽略它。

  • 不,他们几乎应该无法理解。= D (5认同)