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
我认为有一个不成文的规则,即所有RFC必须几乎无法理解。您不是第一个无法解析语法的人,而且-以我的拙见-Spray也失败了。
尾随的“&”号没有错。它是URI中的合法字符,用于分隔参数。尾随的“&”号可能毫无意义,但这不是无效的。喷雾(再次,仅在我看来)应该完全忽略它。
| 归档时间: |
|
| 查看次数: |
4069 次 |
| 最近记录: |