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

有没有办法检测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();
}
315884 次浏览

试试这个

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

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

这个怎么样?

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

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

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

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

Firefox 49有一个错误,其中https可以工作,但https:不行。据说是修复Firefox 54

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

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

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

不是一个Javascript的方式来回答这个问题,但如果你使用CloudFlare,你可以写页面的规则,重定向用户更快到HTTPS,它是免费的。在CloudFlare的页面规则中是这样的:

enter image description here

嗨,我用这个解决方案工作完美。不需要检查,只需使用https。

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

我刚刚有Pui清洁发展机制测试的所有脚本变体,包括上面的答案和许多其他使用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脚本中添加进一步的安全性。< / p >

功能的方式

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

你可以:

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

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

<script>if (document.URL.substring(0,5) == "http:") window.location.replace('https:' + document.URL.substring(5));</script>
你应该检查这个: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests < / p >

将这个标记添加到你的index.html中的

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

希望有帮助。

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

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