我对网址有疑问:
我已阅读RFC 3986,但仍有一个关于一个网址的问题:
如果URI包含授权组件,则路径组件为 必须为空或以斜杠(“/”)字符开头。如果是URI 不包含权限组件,则路径不能开始
带有两个斜杠字符(“//”)。另外,URI引用
(4.1节)可以是相对路径参考,在这种情况下为 第一个路径段不能包含冒号(“:”)字符。 ABNF
需要五个单独的规则来消除这些情况的歧义,只有一个 它将匹配给定URI引用中的路径子字符串。我们 使用通用术语“路径组件”来描述URI子串
解析器与这些规则之一匹配。
我知道,//server.com:80/path/info
有效(它是架构相对URL)
我也知道http://server.com:80/path//info
有效。
但我不确定以下一项是否有效:
http://server.com:80//path/info
我的问题背后的问题是,当http://server.com:80//path/info
创建限制为http://server.com:80/path/info
/path
答案 0 :(得分:36)
请参阅url with multiple forward slashes, does it break anything?,Are there any downsides to using double-slashes in URLs?,What does the double slash mean in URLs?和RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax。
达成共识:浏览器将按原样执行请求,它们不会更改请求。 /
字符是路径分隔符,但路径段定义为:
path-abempty = *( "/" segment )
segment = *pchar
意味着http://example.com/
之后的斜杠可以直接跟随另一个斜杠,无限制。服务器可能会忽略它,但浏览器却没有,正如你已经想到的那样。
短语:
如果URI不包含授权组件,则路径无法启动 有两个斜线字符(“//”)。
允许使用protocol-relative URLs,但在这种情况下明确说明没有权限(您的示例中为server.com:80
)。
所以:是的,它是有效的,不,不要使用它。