我可以将所有的http://链接改为//吗?
戴夫·沃德说,
这并不是轻量级的阅读,但是RFC 3986第4.2节提供了完全合格的URL,它们完全省略了协议(HTTP或HTTPS)。 当URL的协议被省略时,浏览器使用底层文档的协议。
简而言之,这些“无协议”的URL允许像这样的引用在每个浏览器中都可以使用:
//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js
起初看起来很奇怪,但这个“无协议”的URL是引用通过HTTP和HTTPS提供的第三方内容的最佳方式。
这肯定会解决我们在HTTP页面上看到的一系列混合内容错误 – 假设我们的资产通过HTTP和HTTPS都可用。
这完全是跨浏览器兼容? 还有其他的警告吗?
我在发布前彻底testing过。 在Browsershots可用的所有浏览器中 ,我只能find一个不能正确处理协议相对URL的浏览器:一个叫做Dillo的模糊的* nix浏览器。
我收到的反馈有两个缺点:
- 当您在浏览器中“打开”本地文件时,无协议URL可能无法正常工作,因为该页面的基本协议将为file:///。 特别是当你使用CDN托pipe资源等外部资源的无协议URL时。 使用本地Web服务器,如Apache或IIS来testinghttp:// localhost地址工作正常。
- 显然,至less有一个iPhone提要阅读器应用程序不能正确处理没有协议的URL。 我不知道哪一个有问题,或者它有多受欢迎。 对于托pipeJavaScript文件,这不是一个大问题,因为RSS阅读器通常无视JavaScript内容。 然而,如果您在内容中使用这些媒体(如图像)的内容需要通过RSS进行联合(尽pipe单个平台上的这个阅读器应用程序可能只占很less数量的阅读器),那么这可能会成为一个问题。
考虑到是否应该这样做的问题,是否可以将所有的联系都改变为与议定书相关的问题可能是没有意义的。 根据保罗爱尔兰人 :
2014年12月17日:既然SSL是鼓励大家,并没有性能问题,这种技术现在是反模式。 如果您需要的资产在SSL上可用,请始终使用https://资产。
如果您使用无协议URL来加载样式表,IE 7和8将会下载它们两次: http : //www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/
所以,如果你喜欢良好的性能,这是为了避免CSS。
是的, RFC 1808中已经指定了networkingpath引用,并且应该可以在所有浏览器中使用。
这完全是跨浏览器兼容? 还有其他的警告吗?
只是把这个混在一起,如果你正在本地服务器上开发,它可能无法工作。 您需要指定一个scheme,否则浏览器可能会认为src="//cdn.example.com/js_file.js"
是src="file://cdn.example.com/js_file.js"
,将会中断因为你不是在本地托pipe这个资源。
Microsoft Internet Explorer似乎对此特别敏感,请参阅此问题: 无法在本地主机上的Internet Explorer(WAMP)中加载jQuery
您可能总是试图find一个适用于所有环境的解决scheme,并且所需的修改量最less。
HTML5Boilerplate使用的解决scheme是在资源未正确加载时有一个回退,但只有在合并检查时才有效:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <!-- If jQuery is not defined, something went wrong and we'll load the local file --> <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>
我也在这里发布了这个答案。
更新:在决定弃用协议相对URL后, HTML5Boilerplate现在使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
,请参阅此处 。
在使用://domain.com时,我还没有遇到这些问题 – 但是您确实需要在开头添加冒号。 Yoast很早就写了一篇这样的文章。 但是在他的一堆博客文章中已经丢失了。