【发布时间】:2011-11-03 08:18:05
【问题描述】:
我在 Heroku 上使用 Express.js 在 Node.js 上使用 https 启动并运行了一个应用程序。如何识别协议以在 Heroku 上使用 Node.js 强制重定向到 https?
我的应用程序只是一个简单的http-server,它(还)没有意识到 Heroku 正在发送它https-requests:
// Heroku provides the port they want you on in this environment variable (hint: it's not 80)
app.listen(process.env.PORT || 3000);
【问题讨论】:
-
Heroku 支持回答了我上面的问题,我发现这里还没有发布,所以我想我会公开发布并分享知识。他们传递了大量关于原始请求的信息,其请求标头以“x-”为前缀。这是我现在使用的代码(在我的路由定义的顶部):
app.get('*',function(req,res,next){ if(req.headers['x-forwarded-proto']!='https') res.redirect('https://mypreferreddomain.com'+req.url) else next() }) -
好的,我知道你像这样检查 https 并在需要时重定向。但是有没有办法与您的域名提供商在 dns 级别进行重新路由。因此,在浏览器解析 DNS 之前,它已经位于 https。因为使用这种方法,我认为鉴于我对重定向的了解,一旦请求是通过 http 发出的,然后又是通过 https 发出的。因此,如果发送了敏感数据,则通过 http 发送一次。然后通过https。这有点违背了目的。如果我错了,请告诉我。
-
@MuhammadUmer,你的推理在这里似乎是正确的,你有没有发现更多?
-
我只是使用 cloudflare 作为名称服务器,它作为 nginx 工作,只需单击切换按钮即可重定向到 ssl 版本。你也可以这样做:developer.mozilla.org/en-US/docs/Web/HTTP/Headers/… 此外,通常没有人会立即发送数据,他们通常会在表单上然后提交。所以服务器端代码、dns 服务器、http 标头、javascript 你可以检查并重定向到 https developer.mozilla.org/en-US/docs/Web/HTTP/Redirections
标签: redirect ssl node.js https heroku