路径部分中带有 // 的 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

url 路径中带有通配符的 Node.js 和 Websocket

斜杠 ("/") 是不是等同于 HTTP URL 路径部分中的编码斜杠 ("%2F")

什么是URL地址

前端获得Url信息

确定字符串是不是是Java中带有正则表达式的URL [重复]