路径部分中带有 // 的 URL 是不是有效?
Posted
技术标签:
【中文标题】路径部分中带有 // 的 URL 是不是有效?【英文标题】:Is a URL with // in the path-section valid?路径部分中带有 // 的 URL 是否有效? 【发布时间】:2013-12-29 16:08:50 【问题描述】:我有一个关于 URL 的问题:
我已经阅读了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
我的问题背后的问题是,当由 URI http://server.com:80/path/info
创建并限制为 /path
时,cookie 不会发送到 http://server.com:80//path/info
【问题讨论】:
【参考方案1】:请参阅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
)。
所以:是的,它是有效的,不,不要使用它。
【讨论】:
"如果 URI 不包含权限组件" 这是什么意思?什么是权限组件? 根据rfc-editor.org/rfc/rfc3986#section-3中给出的例子,看起来权限相当于域名(带端口)以上是关于路径部分中带有 // 的 URL 是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章
url 路径中带有通配符的 Node.js 和 Websocket