有没有办法检测HTTP或HTTPS,然后强制使用HTTPS与JavaScript?

我有一些检测HTTP或HTTPS的代码,但我不能强迫它使用HTTPS:。

我使用window.location.protocol属性将站点设置为https:然后刷新页面,希望重新加载加载到浏览器中的新的https'ed URL。

if (window.location.protocol != "https:") {
   window.location.protocol = "https:";
   window.location.reload();
}

当前回答

你可以:

  <script type="text/javascript">        
        if (window.location.protocol != "https:") {
           window.location.protocol = "https";
        }
    </script>

其他回答

这不是一个好主意,因为你只是临时重定向用户到https和浏览器不保存这个重定向。

你描述任务的web服务器(apache, nginx等)http 301, http 302

设置的位置。协议导航到一个新的URL。不需要解析/切片任何东西。

if (location.protocol !== "https:") {
  location.protocol = "https:";
}

Firefox 49有一个错误,https可以工作,但https:不能。据说在Firefox 54中已修复。

我喜欢这个问题的答案。但为了更有创意,我想再分享一种方法:

<script>if (document.URL.substring(0,5) == "http:") window.location.replace('https:' + document.URL.substring(5));</script>

下面的代码假设变量'str'包含你的http://....字符串。它检查是否为https,如果为true则不执行任何操作。但是如果是http,它会用https替换http。

if (str.indexOf('https') === -1) { STR = STR .replace('http', 'https') }

你应该检查这个: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests

将这个元标签添加到index.html内头部

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

希望有帮助。