我试图找到如果我在HTTP或HTTPS环境中如何使用JavaScript检测.
我正在调用一个Ajax请求,所以如果我在HTTPS中并调用HTTP Ajax,那么我会得到一个302 Moved Temporarily.
我正在考虑获取当前window.location.href
并进行字符串操作.
使用JavaScript检测HTTPS的最佳方法是什么?
看看谷歌分析如何将他们的脚本添加到页面:
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
然后document.location.protocol对所有浏览器都是安全的.
你可以使用非标准
window.location.protocol
在Firefox中:MDC文档
在IE中,它似乎是
document.location.protocol
MSDN文档
我找不到关于其在其他浏览器上的行为方式的可靠信息,但我希望它们符合准标准document.location.protocol
.
也许jQuery url插件可以对此进行排序,而不必处理跨浏览器的差异 - 我自己从未使用它,但看起来很有希望:
jQuery.url.attr("protocol");
location.protocol
适用于所有浏览器.
这个怎么样 ?
var protocol = window.location.href.indexOf("https://")==0?"https":"http";
在许多情况下,人们可以完全省略协议.所以,而不是
一个人可以用
然后浏览器自动添加当前协议.这也适用于在头部包含文件,它也适用于ajax调用.
编辑:这样做现在被认为是反模式:
现在,每个人都鼓励使用SSL,并且没有性能问题,这种技术现在已成为一种反模式.如果您需要的资产在SSL上可用,则始终使用https:// asset.
允许通过HTTP请求代码段打开了攻击的大门,就像最近的Github Man-on-side攻击一样.即使您的站点在HTTP上,请求HTTPS资产也始终是安全的,但反之则不然.
请参阅:http://www.paulirish.com/2010/the-protocol-relative-url/