2010-05-18 33 views
33

我想找到如何在JavaScript或HTTPS环境下使用JavaScript进行检测。用JavaScript检测HTTPS

我在调用Ajax请求,所以如果我在HTTPS中并调用HTTP Ajax,那么我会得到一个302 Moved Temporarily。

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

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

+0

@DanDascalescu做您使用 “标志”,以纪念其视为重复? – HackerKarma 2015-08-06 00:33:52

+0

@HackerKarma:我投票结束三个星期前。什么也没有发生,只有那时我使用了国旗。 – 2015-08-06 01:03:33

+0

@DanDascalescu谢谢。我只是将其标记为关闭。让我们看看发生了什么。 – HackerKarma 2015-08-06 01:27:54

回答

39

您可以使用非标准

window.location.protocol 

在Firefox:MDC documentation

在IE中,这似乎是

document.location.protocol 

MSDN documentation

我无法找到关于如何在其他浏览器上表现出来的可靠信息,但我希望他们坚持准标准document.location.protocol

也许jQuery url plugin排序了这一点,而不必处理跨浏览器的差异 - 我从来没有用它自己,但它看起来很有希望:在所有浏览器

jQuery.url.attr("protocol"); 
+0

+1:这是更通用的方式:) – Sarfraz 2010-05-18 08:21:31

8

location.protocol作品。

+1

有两个以上的浏览器:) – 2010-05-18 08:30:54

+4

哎!谢谢你让我回到现实:) – 2010-05-18 09:03:38

57

寻找如何谷歌分析添加他们的脚本的页面:

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

然后document.location.protocol似乎安全的所有浏览器。

+0

伟大的洞察力。作品完美无瑕。 – xaragen 2015-08-14 12:49:20

0

对于像这样的东西,存在一个非常整洁的称为URI的lib。 https://github.com/medialize/URI.js

你可能不需要这个只是为了获取协议,但如果你要成为字符串操作的URIs,你应该使用它。

5

这个怎么样?

var protocol = window.location.href.indexOf("https://")==0?"https":"http"; 
+0

应该是protocol = window.location.href.indexOf(“https://”)== 0?“https”:“http”; – 2017-10-10 17:03:42

+0

对,谢谢! – 2017-10-12 10:14:04

4

在许多情况下,可以完全忽略该协议。所以,与其

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

+0

证实这对ajax调用起作用......至少在AngularJS中'$ http.get('// example.com')' – parliament 2015-07-01 20:10:44

+3

我碰到的一个警告是,在将代码部署到移动设备(如果您使用的是Cordova或PhoneGap)。在这种情况下//将解析为file://所以你永远不能使用它来进行http调用。如果你没有开发移动设备,只是忽略这一点。 – parliament 2015-07-02 21:20:06