JavaScript 如何检测HTTP或HTTPS并强制重定向到HTTPS
HTTPS 代表 超文本传输协议安全 。顾名思义,它在用户的浏览器和他们要访问的服务器之间创建了一个安全的加密连接。由于是加密连接,它可以防止恶意黑客窃取从用户浏览器传输到服务器的数据。使用HTTPS的网站也告诉用户他们可以信任您的网站。如果您的网站既有HTTP版本又有相同版本的HTTPS,您可以自动将用户重定向到HTTPS网站。
要实现此重定向,我们将使用JavaScript代码。具体来说,我们将使用 window.location.protocol 属性来识别协议,然后使用 window.location.href 属性来重定向浏览器。 window.location 是 Window 对象的属性。它经常用于 重定向 。window.location返回一个 Location 对象,其中包含许多有用的属性:
- protocol: 这是浏览器窗口当前URL的协议(http:或https:)。
- href: 这是当前浏览器窗口的完整URL地址。它是可写的。
注意: 由于 window.location.href 是可写的,我们将为其设置一个新的URL,从而使用新的URL重新加载浏览器。
示例:
if (window.location.protocol == 'http:') {
console.log("you are accessing us via "
+ "an insecure protocol (HTTP). "
+ "Redirecting you to HTTPS.");
window.location.href =
window.location.href.replace(
'http:', 'https:');
}
else
(window.location.protocol == "https:") {
console.log("you are accessing us via"
+ " our secure HTTPS protocol.");
}
输出:
// On HTTP sites, you will be redirected to the HTTPS version.
缺点: 从浏览器端设置HTTPS重定向存在一些不足之处,包括:
- 如果在你的连接中出现了恶意黑客(中间人攻击),他们可以阻止重定向的发生。
- 在HTTP的初始加载过程中,可能会读取之前设置的Cookie,使黑客能够获取这些Cookie。
因此,我们建议在服务器端通过HTTPS进行重定向,而不是在JavaScript中进行。下面是使用NodeJS(一种用JavaScript编写的服务器)进行重定向的示例。在服务器上使用NodeJS时,代码是相似但不完全相同的。我们将使用 req.protocol 代替。
示例(app.js):
app.get('/', function(req, res, next) {
if (req.protocol == 'http') {
res.redirect('https://' +
req.get('host') + req.originalUrl);
}
});
输出:
// On HTTP sites, you will be redirected to the HTTPS version.
注意: req.protocol不包括冒号(例如:http或https),而window.location.protocol包括冒号(例如:http:和https:)。