用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,你应该使用这个。