使用领先的双斜杠来继承URL中的协议有什么缺点吗?即src ="// domain.com"

Rob*_*olk 146 url https http url-protocol

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

html ex:

<img src="//cdn.domain.com/logo.png" />
Run Code Online (Sandbox Code Playgroud)

css ex:

.class { background: url(//cdn.domain.com/logo.png); }
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 86

如果浏览器支持RFC 1808第4节,RFC 2396第5.2节RFC 3986第5.2节,那么它确实将页面URL的方案用于以"//"开头的引用.

  • 考虑到描述它的第一个RFC,RFC 1808,是在15年前编写的,URL引用是网站功能的关键,我认为可以说几乎所有主流浏览器都支持它.但唯一可以确切知道的方法就是自己尝试一下,看看会发生什么. (22认同)
  • 这是否支持所有主流浏览器?(IE7,IE8,FF,Chrome,Safari) (8认同)
  • "2014.12.17:现在每个人都鼓励使用SSL并且没有性能问题,这种技术现在是一种反模式.如果您需要的资产在SSL上可用,那么请始终使用https:// asset." (引自http://stackoverflow.com/a/27999789) (4认同)
  • 这个问题与提出类似问题的人有关,我在前一年在RFC 1630中找到了它(说明不同,但仍然允许使用相关格式).从1991年开始,如果有人拥有档案,那么它本来可能是在`ftp:// info.cern.ch/pub/www/doc/http-spec.txt`的文件的一种形式或其他形式复制. (2认同)

med*_*iev 64

当用于link或者@import,IE7/IE8将根据http://paulirish.com/2010/the-protocol-relative-url/下载文件两次

2014年更新:

现在,每个人都鼓励使用 SSL ,并且没有性能问题,这种技术现在已成为一种反模式.如果您需要的资产在SSL上可用,则始终使用该https://资产.

  • 哈哈哈哈哈哈.一如既往,它不适用于较旧的IE.天啊! (20认同)
  • 修复了IE9,FWIW. (18认同)

Syn*_*hro 62

如果您的网址是在网页上下文之外查看,则会出现一个缺点.例如,位于电子邮件客户端(例如,Outlook)中的电子邮件实际上没有URL,当您查看包含协议相对URL的邮件时,根本没有明显的协议上下文(邮件本身是独立的)用于获取它的协议,无论是POP3,IMAP,Exchange,uucp还是其他什么)所以URL没有相关的协议.我没有调查与电子邮件客户端的兼容性,看看他们在提供丢失的协议处理程序时所做的事情 - 我猜大多数人都会猜测http.Apple Mail拒绝让您输入没有协议的URL.它类似于相对URL在电子邮件中不起作用的方式,因为同样缺少上下文.

其他非HTTP上下文中也可能出现类似问题,如推文,短信,Word文档等.

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

  • 这是一个非常好的观点,我昨晚睡着了,实际上正在思考这个问题.另一个问题是`https`或`http`版本可能实际上不可用,你不能总是假设它是. (5认同)
  • 如果您指定例如`<base href ="https://www.google.com">`,则可以查看网络外的内容.`<img rel="nofollow noreferrer" src ="// www.google.com/images/srpr/logo11w.png">`或`<img rel="nofollow noreferrer" src ="images/srpr/logo11w.png">` (2认同)