代码之家  ›  专栏  ›  技术社区  ›  ntan

用javascript检测https[重复]

  •  38
  • ntan  · 技术社区  · 15 年前

    我正在尝试寻找如果我在HTTP或HTTPS环境中,如何用JavaScript检测。

    我正在调用一个Ajax请求,所以如果我使用的是HTTPS并调用HTTP Ajax,那么我将得到一个302临时移动。

    我在想得到电流 window.location.href 然后做一个字符串操作。

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

    6 回复  |  直到 7 年前
        1
  •  40
  •   Pekka    15 年前

    您可以使用非标准

    window.location.protocol 
    

    在Firefox中: MDC documentation

    在IE中,似乎

     document.location.protocol
    

    MSDN documentation

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

    也许 jQuery url plugin 在不需要处理跨浏览器差异的情况下对其进行分类-我自己从未使用过它,但它看起来很有前途:

    jQuery.url.attr("protocol");
    
        2
  •  60
  •   Rich    13 年前

    看看谷歌分析如何将他们的脚本添加到页面:

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

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

        3
  •  8
  •   avpaderno    13 年前

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

        4
  •  7
  •   Vic Seedoubleyew    7 年前

    这个怎么样?

     var protocol = window.location.href.indexOf("https://")==0?"https":"http";
    
        5
  •  5
  •   jberculo    9 年前

    在许多情况下,可以完全忽略协议。所以,而不是

    <img src="https://test.com/image.jpg" />
    

    可以使用

    <img src="//test.com/image.jpg" />
    

    然后浏览器自动添加当前协议。这也适用于在头中包含文件,而且它也适用于Ajax调用。

    编辑:这样做现在被认为是反模式:

    既然每个人都鼓励使用SSL,并且没有性能问题,那么该技术现在是一种反模式。如果您需要的资产在SSL上可用,则始终使用https://asset。

    允许代码片段通过HTTP请求打开了攻击的大门,就像最近的GithubManon-the-side攻击一样。即使您的站点在HTTP上,请求HTTPS资产也始终是安全的,但是反过来却不是这样。

    见: http://www.paulirish.com/2010/the-protocol-relative-url/

        6
  •  0
  •   Yoh Suzuki    12 年前

    对于类似的事情,有一个非常好的lib称为uri。 https://github.com/medialize/URI.js

    您可能不需要这样做来获取协议,但是如果要对URI进行字符串操作,您应该使用这个。

    推荐文章