网络路径参考 URI / 方案相对 URL

Posted

技术标签:

【中文标题】网络路径参考 URI / 方案相对 URL【英文标题】:Network-Path Reference URI / Scheme relative URLs 【发布时间】:2011-04-04 17:30:33 【问题描述】:

方案相对 URL(网络路径引用)是我刚刚发现的 - 您不指定 URL 的方案,它会从当前上下文中获取它。

例如: 如果当前方案是 HTTPS,<img src="//domain.com/img.png" /> 将解析为 https://domain.com/img.png,如果不是,则解析为 http://domain.com/img.png

这似乎是一种非常简单的方法,可以解决调用 SSL 页面上的外部脚本或图像的那些讨厌的问题,而不会引发页面上的某些内容不安全的可怕错误。

好处似乎很明显,但我似乎无法找到关于此的大量信息,并且想知道是否有人对方案相对 URL(好或坏)有任何经验或参考?

虽然我试图发现是否有任何浏览器会导致问题(我已经成功使用 IE6-8、Chrome 和 Firefox),但我也有兴趣了解是否有人有任何使用经验这在不同的语言。例如,如果您要在 ASP 中发出带有方案相对 URL 的 Response.Redirect,它会起作用吗?

【问题讨论】:

Is it valid to replace http:// with // in a <script src="http://...">? 的可能重复项 【参考方案1】:

//domain.com/img.png 是一个完全有效的 URI 语法,符合 RFC 3986: Section 4.2。

它是相对于当前的scheme,因此正如你所提到的,它在 http 和 https 之间切换时非常有用,因为你不需要显式指定方案。

所有现代浏览器都会理解这种格式,包括 IE 6。

进一步阅读 Stack Overflow:

Is it valid to replace http:// with // in a &lt;script src="http://..."&gt;? Using // in a &lt;script&gt;'s source

【讨论】:

这样的 URL 并不新鲜。它们是自 1995 年以来 URL 规范的一部分(请参阅 RFC 1808)。 我不一定相信任何类型的客户端都能正确解析这些 URL,但主流浏览器肯定会。 那么谷歌有什么理由选择另一种方式吗? - code.google.com/apis/analytics/docs/tracking/… @Dan Atkinson:对于谷歌分析来说,与任何不起眼的用户代理兼容可能更为重要,而且他们可能发现这更可靠。不过,我想一般来说,我们的 Web 应用程序不必与 Netscape 2 时代的浏览器兼容。 这里有一个链接解释了为什么谷歌不将它用于谷歌分析。简而言之,它会导致 Windows XP 上的 IE6 出现问题(但仅仅是因为该浏览器不支持 TLS SNI)。 paulirish.com/2010/the-protocol-relative-url/#comment-37852【参考方案2】:

如果您想支持 IE 7 和 8,您可能需要考虑样式表的方案相对 URL 将导致它们被下载两次:

[...] 如果您在 Internet Explorer 7 和 8 中尝试此操作,您会看到使用协议相对 URL 指定的样式表被下载了两次。

如果开发人员希望他们的页面在 Internet Explorer 7 和 8 中尽可能快,则应避免对样式表使用协议相关 URL。

来源:http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/

【讨论】:

+1 提醒。我的反应是我很好。迟钝的 IE 会更加迟钝,让更好的浏览器看起来更好。

以上是关于网络路径参考 URI / 方案相对 URL的主要内容,如果未能解决你的问题,请参考以下文章

Java中路径的获取总结以及URL和URI的区别

Retrofit网络框架介绍

Java路径

相对路径和绝对路径的区别是啥?

路径部分中带有 // 的 URL 是不是有效?

返回到 Web 相对路径的绝对路径