-3

我只想允许 https 流量到我的 Hapi Js 服务器。

在此线程中: Node.JS、Express 和 Heroku - 如何处理 HTTP 和 HTTPS?

它是通过以下方式完成的:

if (process.env.NODE_ENV == 'production') {
        app.use(function (req, res, next) {
            res.setHeader('Strict-Transport-Security', 'max-age=8640000; includeSubDomains');
            if (req.headers['x-forwarded-proto'] && req.headers['x-forwarded-proto'] === "http") {
                return res.redirect(301, 'https://' + req.host + req.url);
            } else {
                return next();
            }
        });
    }
4

2 回答 2

1

这是一个很好的 npm 模块:https ://www.npmjs.org/package/hapi-require-https

于 2014-11-13T23:34:39.820 回答
0

这是我的(相当老套的)解决方案:

// redirect all http request to secure route
if ('production' === process.env.NODE_ENV) {
  server.ext('onRequest', function (request, next) {
    if (request.headers['x-forwarded-proto'] !== 'https') {
      request.originalPath = request.path;
      request.setUrl('/redirect');
    }
    next();
  });

  server.route([{
    method: 'GET',
    path: '/redirect',
    handler: function (request, reply) {
      var host = request.headers.host;
      reply().redirect('https://' + host + request.originalPath);
    }
  }]);
}

也许有人可以想出一些更清洁的东西。警告:这并不能防止不安全的 http 流量。它只是将浏览器重定向到 https 位置。

于 2014-05-17T02:42:51.707 回答