当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在ExpressJS下检测HTTPS仅适用于4种方法中的1种》经验,为你挑选了1个好方法。

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

什么对我不起作用:

req.secure:即使我手动放置https:// 总是返回false

req.connection.encrypted:即使我手动放入https://也总是返回undefined

req.protocol:即使我手动放置https:// 总是返回http

什么有效:

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上主持

节点版本:4.1.1

快递:4.13.0

keithmo.. 5

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

在Heroku的路由文件,对它们的路由结构的详细信息.



1> keithmo..:

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

在Heroku的路由文件,对它们的路由结构的详细信息.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有