路径部分中带有//的URL是否有效?

时间:2013-12-11 15:36:21

标签: http url cookies session-cookies rfc3986

我对网址有疑问:

我已阅读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

时,Cookie不会发送到/path

1 个答案:

答案 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)。

所以:是的,它是有效的,不,不要使用它。