使用前导双斜杠来inheritanceURL中的协议有什么不利之处吗? 即src =“// domain.com”

我有一个样式表从外部域加载图像,我需要它从https://从安全的订单页面和http://从其他页面加载,基于当前的URL。 我发现用双斜杠启动URL会inheritance当前的协议。 所有浏览器都支持这种技术吗?

html例如:

<img src="//cdn.domain.com/logo.png" /> 

css例如:

 .class { background: url(//cdn.domain.com/logo.png); } 

如果浏览器支持RFC 1808第4节 , RFC 2396第5.2节或RFC 3986第5.2节 ,那么它确实将页面URL的scheme用于以“//”开头的引用。

link@import ,IE7 / IE8将按照http://paulirish.com/2010/the-protocol-relative-url/下载文件两次;

2014年更新:

既然SSL受到鼓励,并且没有性能问题 , 现在这种技术是反模式 。 如果您需要的资产在SSL上可用,请始终使用https://资产。

如果您的url是在网页上下文外部查看的,则会出现一个不足之处。 例如,坐在电子邮件客户端(如Outlook)中的电子邮件实际上没有URL,而当您查看包含协议相关URL的消息时,根本没有明显的协议上下文(消息本身是独立的用于获取它的协议,无论是POP3,IMAP,Exchange,uucp或其他),所以这个URL没有任何相关的协议。 我还没有调查与电子邮件客户端的兼容性,看看他们提供了一个丢失的协议处理程序时,他们做什么 – 我猜大多数人会猜测http。 Apple Mail拒绝让您在没有协议的情况下inputurl。 这与相对URL在电子邮件中不起作用的方式类似,这是因为缺less相似的上下文。

类似的问题可能会出现在其他非HTTP上下文,如在微博,短信,Word文档等

更一般的解释是匿名协议URL不能孤立地工作, 必须有相关的背景。 在一个典型的网页中,以这种方式拉入脚本库是很好的,但是任何外部链接都应该总是指定一个协议。 我曾尝试一个简单的testing: //stackoverflow.com映射到file:///stackoverflow.com在所有浏览器中,我尝试了它,所以他们真的不自行工作。

原因可能是提供便携式网页。 如果外部页面未被encryption传输(http),为什么链接的脚本应该被encryption? 这似乎是不必要的性能损失。 如果外部页面被安全传输(https),则链接的内容也应该被encryption。 如果页面被encryption,则链接的内容不可用,IE似乎会发出混合内容警告。 原因是攻击者可以在途中操纵脚本。 请参阅http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1进行更长时间的讨论。;

EFF的HTTPS Everywhere活动build议尽可能使用https。 我们现在有服务器的容量来提供始终encryption的网页。

只是为了完整。 这是在另一个线程中提到的:

“两个正斜杠是任何正在使用的协议的通用速记”

 if (plain http environment) { use 'http://example.com/my-resource.js' } else { use 'https://example.com/my-resource.js' } 

请检查完整的线程。

现在看来这是一个很常见的技术。 没有缺点,它只有帮助统一页面上的所有资产的协议,所以应尽可能使用。