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 是可选的吗?的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:Not null 属性应该是可选的吗?

[react] 自定义组件时render是可选的吗?为什么?

传递给 PDOStatement::bindParam() 的参数名称的前导冒号是可选的吗?

传递给 PDOStatement::bindParam() 的参数名称的前导冒号是可选的吗?

TensorFlow GPU:cudnn 是可选的吗?无法打开 CUDA 库 libcudnn.so

[react] 自定义组件时render是可选的吗?为什么?