如何检测 HTTP 或 HTTPS 然后在 JavaScript 中强制重定向到 HTTPS?
HTTPS代表安全的超文本传输协议。顾名思义,它在用户的浏览器和他们尝试访问的服务器之间创建了一个安全、加密的连接。由于它是一个加密连接,它可以防止恶意黑客窃取从用户浏览器传输到服务器的数据。在 HTTPS 中拥有一个站点还告诉用户他们可以信任您的站点。如果您有一个 HTTP 站点以及 HTTPS 相同版本,您可以自动将用户重定向到 HTTPS 站点。
为了实现这个重定向,我们将使用 JavaScript 代码。具体来说,我们将使用window.location.protocol属性来识别协议,然后使用window.location.href属性来重定向浏览器。 window.location是Window对象的一个属性。它通常用于重定向。 window.location返回一个Location对象,其中包含许多有用的属性:
- 协议:这是浏览器窗口当前 URL 的协议(http: 或 https:)。
- href:这是当前浏览器窗口的完整 URL。它是可写的。
注意:由于window.location.href是可写的,我们将为它设置一个新的 URL,因此使用新的 URL 重新加载浏览器。
- 例子:
javascript
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.");
}
javascript
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.
缺点:从浏览器端设置 HTTPS 重定向有一些缺点。这些缺点包括:
- 如果您的连接中间有恶意黑客(中间人攻击),他们可以阻止重定向的发生。
- 在 HTTP 的初始加载期间,可能会有先前设置的 cookie 现在可以被黑客读取。
因此,我们建议通过服务器端的 HTTPS 而不是 JavaScript 来重定向用户。我们在下面添加了一个示例,说明如何使用 NodeJS 执行此重定向,NodeJS 是一个用 Javascript 编写的服务器。在服务器上使用 NodeJS,代码类似但不完全相同。我们将使用req.protocol代替。
- 示例(app.js):
javascript
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: )。