gpt4 book ai didi

node.js - 在 ExpressJS 下检测 HTTPS 仅适用于 4 种方法中的 1 种

转载 作者:搜寻专家 更新时间:2023-11-01 00:23:17 25 4
gpt4 key购买 nike

我最近在我的网站上添加了 SSL 证书。添加 HTTPS 支持后,我想将人们重定向到安全连接。我用谷歌搜索查看如何检测 HTTPS,并在 Stack 上找到了许多不同的方法。它接缝他们为别人工作,但他们不为我工作。在检查安全连接的 4 种方法中,只有一种有效。

什么对我不起作用:

  • req.secure:总是返回false,即使我手动输入 https://
  • req.connection.encrypted:总是返回undefined,即使我手动输入 https://
  • req.protocol:总是返回http,即使我手动输入https://

什么有效:

req.headers['x-forwarded-proto'] 是实际返回现实的唯一方式。

知道这一点后,我通过以下方式重定向到安全连接:

// Check if the connection is secure, if not, reddiret to a secure one.
function requireHTTPS(req, res, next) {
if(process.env.NODE_ENV == 'production') {
if (req.headers['x-forwarded-proto'] !== 'https') {
return res.redirect('https://' + req.get('host') + req.url);
}
}

next();
}

app.use(requireHTTPS);

在我上面提到的任何其他方式中,我都会得到一个重定向循环,因为即使在重定向到 HTTPS 之后,上述方法也会返回 falsehttp

我的问题是:为什么其他方法不起作用?

技术规范:

  • 网站:https://simpe.li
  • 托管在 Heroku 上
  • Node 版本:4.1.1
  • express :4.13.0

最佳答案

Heroku 为您公开 HTTPS,然后将标准 HTTP 代理给您的工作人员。 req.headers['x-forwarded-proto'] 方法是在 Heroku 下检测 HTTPS 的正确方法。同样,如果您需要原始 IP 地址和端口,则需要访问 x-forwarded-forx-forwarded-port

Heroku Routing文档中有关于其路由结构的更多详细信息。

关于node.js - 在 ExpressJS 下检测 HTTPS 仅适用于 4 种方法中的 1 种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34071093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com