我可以将所有http://链接更改为//吗?

a p*_*erd 238 url https http protocol-relative

戴夫沃德说,

它并不完全是轻量级读取,但RFC 3986的4.2节提供了完全限定协议(HTTP或HTTPS)的完全限定URL.当省略URL的协议时,浏览器将使用基础文档的协议.

简而言之,这些"无协议"URL允许这样的引用在您尝试使用的每个浏览器中工作:

//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js

一开始看起来很奇怪,但这种"无协议"URL是引用通过HTTP和HTTPS提供的第三方内容的最佳方式.

这肯定会解决我们在HTTP页面上看到的一堆混合内容错误 - 假设我们的资产可通过HTTP和HTTPS获得.

这是完全跨浏览器兼容吗?还有其他警告吗?

Dav*_*ard 202

我在发布前彻底测试了它.在可用于在Browsershots上测试的所有浏览器中,我只能找到一个没有正确处理协议相对URL的浏览器:一个名为Dillo的模糊*nix浏览器.

我收到的反馈有两个缺点:

  1. 当您在浏览器中"打开"本地文件时,无协议URL可能无法正常工作,因为页面的基本协议将为file:///.特别是当您使用无协议URL作为CDN托管资产等外部资源时.使用像Apache或IIS这样的本地Web服务器来测试http:// localhost地址可以正常工作.
  2. 显然,至少有一个iPhone提要阅读器应用程序无法正确处理无协议URL.我不知道哪个有问题或有多受欢迎.对于托管JavaScript文件,这不是一个大问题,因为RSS阅读器通常无论如何都会忽略JavaScript内容.但是,如果您将这些URL用于需要通过RSS进行联合的内容中的图像(例如,单个平台上的这个单一阅读器应用程序可能占据了极少数读者),则可能会出现问题.

  • 虽然IE7/8在大多数情况下处理协议相对URL(也称为无方案URI),但是当使用这样的URL指定样式表时,它将下载它们_twice_.(所以[Steve Souders](http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/)) (33认同)
  • 重要的是要理解这些URL不是**protocol-_less_,而是protocol-_relative_.他们从他们的上下文中获取他们的协议,并且在大多数浏览器中缺少他们将像文件URL一样的上下文,实际上意味着他们打破了他们不会加载预期的内容.虽然它们在通过http传递时可以工作,但您会发现如果您保存页面并从本地文件加载完全相同的HTML,则它们不会,因为上下文不同.您应该使用它们的唯一上下文是http vs https. (11认同)
  • 我发现IE6试图将URI转换为相对的URI(即删除一个前导斜杠).这是一个`link`元素.例如,当指定`//fonts.googleapis.com/css?family = Rokkitt:400,700`时,IE6会尝试加载`http://mysite.com/fonts.googleapis.com/css/ <...> .不太好! (3认同)
  • 我在日志中看到了很多与无协议URL无关的内容.很多蜘蛛的写作都非常糟糕. (3认同)
  • 我从我的日志实例中发现了似乎是网络蜘蛛机器人(来源未知)的尝试使用无协议链接而不正确处理它们的实例. (2认同)

Oha*_*der 37

考虑到人们是否应该这样做的问题,是否可以将所有联系改为议定书相关的问题可能没有实际意义.根据Paul Irish的说法:

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

  • 仅当文档通过安全(https)加载但资产超过不安全(http)时,才会触发@Ohad_Schneider警告.我建议你可以随时加载资产而不是安全,即使文件加载不安全.没有警告也没有理由不使用安全,因此不需要整个"协议相对URL". (3认同)

Tim*_*dle 30

如果使用无协议URL加载样式表,IE 7和8将下载两次:http: //www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/

因此,如果您喜欢良好的性能,那么CSS应该避免这种情况.

  • 确实如此,随着IE 7和8的市场份额缩小,这一点变得越来越不成为避免使用无方案URL的理由. (5认同)

Gum*_*mbo 15

是的,网络路径引用已在RFC 1808中指定,并且应该适用于所有浏览器.

  • 它甚至被推荐并用于HTML5样板代码:http://html5boilerplate.com/ (11认同)
  • @Caspar Kleijne:我用句子的其余部分解释了是的. (2认同)