路径中含有 // 的 URL 是否有效?

57

关于URL的问题:

我阅读了RFC 3986,但仍有一个关于URL的问题:

 

如果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
我的问题是,当使用URI http://server.com:80/path/info 限制为 /path 时,cookie 不会被发送到 http://server.com:80//path/info
1个回答

66

请参见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不包含授权组件,则路径不能以两个斜杠字符(“//”)开头。

允许使用协议相对URL,但在这种情况下,特别指出没有授权(server.com:80在你的示例中) 可能存在。

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


1
如果一个URI不包含授权组件,那是什么意思?什么是授权组件? - Black
1
根据 https://www.rfc-editor.org/rfc/rfc3986#section-3 中给出的示例,看起来权限等同于域名(带端口)。 - Makesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接