【发布时间】:2011-08-13 13:30:51
【问题描述】:
省略 http 似乎使它使用 HTTP 连接,但我没有启用 HTTPS 的站点来测试它是否也适用于 HTTPS。
使用 //www.example.com/test.js 会根据主文档的协议自动选择协议吗?
【问题讨论】:
标签: javascript https network-protocols
省略 http 似乎使它使用 HTTP 连接,但我没有启用 HTTPS 的站点来测试它是否也适用于 HTTPS。
使用 //www.example.com/test.js 会根据主文档的协议自动选择协议吗?
【问题讨论】:
标签: javascript https network-protocols
http://paulirish.com/2010/the-protocol-relative-url/
关于这个问题有一篇很棒的文章。包括在这里:
2010 年 10 月 27 日
作者:保罗·爱尔兰
这个小技巧可以让你摆脱一些麻烦:
<img src="//domain.com/img/logo.png">
如果浏览器正在通过 HTTPS 查看当前页面,那么它将使用 HTTPS 协议请求该资产,否则它通常*会使用 HTTP 请求它。这可以防止 IE 中出现可怕的“此页面同时包含安全和非安全项目”错误消息,从而将您的所有资产请求保持在同一协议中。
*当然,如果你在本地查看文件,它会尝试使用 file:// 协议请求文件。
我们在 HTML5 Boilerplate 中使用这个技巧来巧妙地从 Google CDN 请求 jQuery:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.2.js"%3E%3C/script%3E'))</script>
从技术上讲,根据 RFC 3986,这被称为“网络路径引用”。哦,如果您想真正正确,在谈论 URL 时,您将使用术语“方案”而不是“协议”。
这个技巧在 CSS 中也可以正常工作:
.omgomg { background: url(//websbestgifs.net/kittyonadolphin.gif); }
…假设您指向的站点在 HTTP 和 HTTPS 上都提供此资产。
警告:当在 <link> 或 @import 上使用样式表时,IE7 和 IE8 会下载文件两次。但是,所有其他用途都很好。
感谢 miketaylr、ralphholzmann、annevk 和 ajaxian,我想我是在 4 年前学到的?也许吧?
2011.01.23:但是.. 在谷歌分析 sn-p 上使用这个怎么样? 是的,当然,那不是很好.. 所以我与 Google Analytics javascript 首席开发人员(上帝,我喜欢在 google 工作)一起工作,看看我们是否可以做到这一点.. 事实证明我们不能。在某些安全设置(不确定它们是否为默认设置)下,当请求非“ssl”子域时,IE6 中存在一个边缘案例错误,该错误会导致对话框爆炸。截图在这里。因此,如果您不关心 IE6,请随意从您的 GA sn-p 中删除 40 个字节。否则您将需要那个三元运算符。 :)
【讨论】: