检测HTTP或HTTPS,然后在JavaScript中强制HTTPS

2020/10/04 02:41 · javascript ·  · 0评论

有什么方法可以检测HTTP或HTTPS,然后通过JavaScript强制使用HTTPS?

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

我正在使用window.location.protocol属性设置站点的任何内容,https:然后刷新页面以希望将新的httpsed URL重新加载到浏览器中。

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

尝试这个

if (location.protocol !== 'https:') {
    location.replace(`https:${location.href.substring(location.protocol.length)}`);
}

location.href = blah将此重定向添加到浏览器历史记录。如果用户单击“后退”按钮,他们将被重定向回同一页面。最好使用location.replace它,因为它不会将此重定向添加到浏览器历史记录中。

设置location.protocol导航到新URL无需解析/切片任何内容。

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

Firefox 49有一个可以工作错误httpshttps:没有作用。据说是在Firefox 54中修复的

这不是一个好主意,因为您只是将用户临时重定向到https,而浏览器不会保存此重定向。

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

这个怎么样?

if (window.location.protocol !== 'https:') {
    window.location = 'https://' + window.location.hostname + window.location.pathname + window.location.hash;
}

不过,理想情况下,您应该在服务器端执行此操作。

if (location.protocol == 'http:')
  location.href = location.href.replace(/^http:/, 'https:')

不是使用Java脚本来回答这个问题的方法,但是如果您使用CloudFlare,则可以编写页面规则来将用户更快地重定向到HTTPS,而且它是免费的。在CloudFlare的页面规则中看起来像这样:

在此处输入图片说明

你可以做:

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

您应该检查以下内容:https :
//developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests

这种添加的元标记您的index.html里面的头

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

希望能有所帮助。

功能方式

window.location.protocol === 'http:' && (location.href = location.href.replace(/^http:/, 'https:'));

我喜欢这个问题的答案。但是要想发挥创造力,我想再分享一种方式:

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

<script language="javascript" type="text/javascript">
document.location="https:" + window.location.href.substring(window.location.protocol.length, window.location.href.length);
</script>

我刚刚通过Pui Cdm测试了所有脚本变体,包括上面的答案以及使用php,htaccess,服务器配置和Javascript的许多其他答案,结果是该脚本

<script type="text/javascript">        
function showProtocall() {
        if (window.location.protocol != "https") {
            window.location = "https://" + window.location.href.substring(window.location.protocol.length, window.location.href.length);
            window.location.reload();
        }
    }
    showProtocall();
</script> 

vivek-srivastava提供的
效果最佳,您可以在Java脚本中添加更多安全性。

本文地址:http://javascript.askforanswer.com/jiancehttphuohttpsranhouzaijavascriptzhongqiangzhihttps.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!