用JavaScript检测HTTPS
我试图find如果我在HTTP或HTTPS环境中如何检测JavaScript。
我正在调用一个Ajax请求,所以如果我在HTTPS中并调用HTTP Ajax,那么我会得到一个302 Moved Temporarily。
我想获取当前的window.location.href
并做一个string操作。
使用JavaScript检测HTTPS的最佳方法是什么?
你可以使用非标准的
window.location.protocol
在Firefox中: MDC文档
在IE中,似乎是
document.location.protocol
MSDN文档
我无法find关于这在其他浏览器上的行为的可靠信息,但我希望他们遵守document.location.protocol
的准标准。
也许jQuery的URL插件sorting了这个,而不必处理跨浏览器的差异 – 我从来没有用过它,但它看起来很有希望:
jQuery.url.attr("protocol");
看看谷歌分析如何将他们的脚本添加到页面:
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
那么document.location.protocol对所有的浏览器来说都是安全的。
location.protocol
适用于所有浏览器。
这个怎么样 ?
var protocol = window.location.href.indexOf("https://")==0?"https":"http";
在许多情况下,可以完全省略协议。 所以,而不是
<img src="https://test.com/image.jpg" />
人们可以使用
<img src="//test.com/image.jpg" />
浏览器然后自动添加当前的协议。 这也适用于头文件,它也应该为Ajax调用。
编辑:这样做现在被认为是反模式:
既然SSL受到鼓励,并且没有性能问题,现在这种技术是反模式。 如果您需要的资产在SSL上可用,请始终使用https://资产。
允许通过HTTP请求片段,就像最近的Github Man-on-side攻击一样攻击门户。 即使您的网站使用HTTP,请求HTTPS资产也是安全的,但事实并非如此。
请参阅: http : //www.paulirish.com/2010/the-protocol-relative-url/
对于像这样的东西,有一个非常好的叫做URI的lib。 medialize/URI.html
你可能不需要这个来获取协议,但是如果你想成为string操作的URI,你应该使用这个。