URI 中的 Scheme 是可选的吗?
Posted
技术标签:
【中文标题】URI 中的 Scheme 是可选的吗?【英文标题】:Is the Scheme Optional in URIs? 【发布时间】:2011-03-16 14:16:01 【问题描述】:我最近被要求向网站添加一些 Woopra javascript,并注意到 URL 以双斜杠开头(即省略了该方案)。我以前从未见过这个,所以我试图了解更多关于它的信息,但我唯一能真正找到的是an item on the Woopra FAQ:
安装程序中的 Woopra JavaScript 在脚本的 URL 调用中不包含 http。这是对的。 JavaScript 已经过优化,可以在您的网站上快速高效地运行。
但是,一些验证和站点测试/调试服务和工具无法识别代码是正确的。这是正确和有效的。如果警告让您烦恼,只需将 http 添加到脚本的 URL。它不会影响脚本。
(为了清楚起见,URL 是“//static.woopra.com/js/woopra.v2.js”——除了“http”之外,冒号被省略。)
有没有关于这种做法的更多信息?如果这确实有效,那么一定有一个规范来讨论它,我非常希望看到它。
提前感谢您满足我的好奇心!
【问题讨论】:
【参考方案1】:这是一个有效的 URL。它被称为RFC 3986 中定义的“网络路径引用”。当您不指定方案/协议时,它将回退到当前方案。因此,如果您通过 https:// 查看页面,所有网络路径引用也将使用 https。
例如,这里有一个指向RFC 3986 文档的链接,但带有网络路径参考。如果您通过 https 来查看此页面(尽管看起来您不能将 https 与 *** 一起使用),该链接将反映您当前的 URI 方案,这与第一个链接不同。
【讨论】:
【参考方案2】:参见RFC 3986,第 3 节:
通用 URI 语法由 组件的分层序列 称为计划、授权、 路径、查询和片段。
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment
]
hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty
方案和路径组件是 需要,但路径可能是 空(无字符)。
【讨论】:
所以 Woopra 完全错误地认为它是“正确和有效的”?以上是关于URI 中的 Scheme 是可选的吗?的主要内容,如果未能解决你的问题,请参考以下文章
[react] 自定义组件时render是可选的吗?为什么?
传递给 PDOStatement::bindParam() 的参数名称的前导冒号是可选的吗?
传递给 PDOStatement::bindParam() 的参数名称的前导冒号是可选的吗?