我最近在我的网站上添加了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之后,上述方法也会返回false或http.
我的问题是:为什么其他方法不起作用?
技术规格:
网站: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的路由文件,对它们的路由结构的详细信息.
Heroku为您公开HTTPS,但随后将标准HTTP代理到您的工作人员.该req.headers['x-forwarded-proto']
方法是在Heroku下检测HTTPS的正确方法.同样,如果需要原始IP地址和端口x-forwarded-for
,x-forwarded-port
则需要访问.
在Heroku的路由文件,对它们的路由结构的详细信息.