📜  如何检测 HTTP 或 HTTPS 然后在 JavaScript 中强制重定向到 HTTPS?

📅  最后修改于: 2022-05-13 01:56:52.058000             🧑  作者: Mango

如何检测 HTTP 或 HTTPS 然后在 JavaScript 中强制重定向到 HTTPS?

HTTPS代表安全的超文本传输协议。顾名思义,它在用户的浏览器和他们尝试访问的服务器之间创建了一个安全、加密的连接。由于它是一个加密连接,它可以防止恶意黑客窃取从用户浏览器传输到服务器的数据。在 HTTPS 中拥有一个站点还告诉用户他们可以信任您的站点。如果您有一个 HTTP 站点以及 HTTPS 相同版本,您可以自动将用户重定向到 HTTPS 站点。
为了实现这个重定向,我们将使用 JavaScript 代码。具体来说,我们将使用window.location.protocol属性来识别协议,然后使用window.location.href属性来重定向浏览器。 window.locationWindow对象的一个属性。它通常用于重定向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不包含冒号(例如: httphttps ),而window.location.protocol包含(例如: http:https: )。