使用JavaScript检测HTTPS

使用JavaScript检测HTTPS,javascript,https,Javascript,Https,我正在试图找到,如果我在HTTP或HTTPS环境中,如何使用JavaScript进行检测 我正在调用一个Ajax请求,所以如果我使用HTTPS并调用HTTPAjax,那么我会临时移动一个302 我正在考虑获取当前的window.location.href并进行字符串操作 使用JavaScript检测HTTPS的最佳方法是什么?您可以使用非标准的 window.location.protocol 在Firefox中: 在IE中,似乎是这样 document.location.protocol

我正在试图找到,如果我在HTTP或HTTPS环境中,如何使用JavaScript进行检测

我正在调用一个Ajax请求,所以如果我使用HTTPS并调用HTTPAjax,那么我会临时移动一个302

我正在考虑获取当前的
window.location.href
并进行字符串操作


使用JavaScript检测HTTPS的最佳方法是什么?

您可以使用非标准的

window.location.protocol 
在Firefox中:

在IE中,似乎是这样

 document.location.protocol

我找不到关于这在其他浏览器上的行为的可靠信息,但我希望它们遵循
document.location.protocol
的准标准

也许他们可以在不必处理跨浏览器差异的情况下解决这一问题——我自己从未使用过它,但它看起来很有希望:

jQuery.url.attr("protocol");

location.protocol
适用于所有浏览器。

查看google analytics如何将脚本添加到页面:

ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

那么document.location.protocol对于所有浏览器来说似乎都是安全的。

对于类似的内容,有一个非常简洁的库,名为URI

您可能不需要这个来获取协议,但是如果您要处理字符串URI,您应该使用它。

这个怎么样

 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://asset

允许代码片段通过HTTP进行请求为攻击打开了大门,比如最近的Github旁人攻击。即使您的站点位于HTTP上,请求HTTPS资产也始终是安全的,但事实并非如此


请参阅:

+1:这是一种更通用的方式:)有两种以上的浏览器:)哎哟!谢谢你让我回到现实:)确认这对ajax调用有效。。。至少对于AngularJS
$http.get('//example.com')
我遇到的一个警告是,在将代码部署到移动设备后(如果您使用的是Cordova或PhoneGap),这个答案将不起作用。在这种情况下,SIUTION//将解析为file://因此您永远不能将其用于http调用。如果你不是为手机开发的,那就别理它了。@DanDascalescu你有没有用“flag”把它标记为复制品?@HackerKarma:我三周前投票决定关闭。什么也没发生,只有在那时我才使用国旗。@DanDascalescu谢谢。我只是把它标记为关闭。让我们看看会发生什么。@HackerKarma:在读了你的评论后,我没有看到接近票数的选票(看起来我的被删除了,我不明白是怎么或者为什么)。我刚刚投票再次关闭,但仍然看到“关闭(1)”,这表明您的投票也被删除了?编辑:刚刚注意到你的代表是394。你可以投接近票数的票吗?@DanDascalescu抱歉,我的意思是,我把它标记为“复制”伟大的洞察力。工作正常。应该是protocol=window.location.href.indexOf(“https://”)==0?“https”:“http”;