我最近尝试在节点/express服务器上设置HTTPS。我已经成功地使用以下代码将所有路由重定向为使用https:
// force https redirect
var https_redirect = function(req, res, next) {
if (req.secure) {
if(env === 'development') {
return res.redirect('https://localhost:3000' + req.url);
} else {
return res.redirect('https://' + req.headers.host + req.url);
}
} else {
return next();
}
};
app.get('*', function(req, res, next) {
https_redirect(req, res, next);
});
这似乎运行得很好。然而,由于我在此之前没有涉足这一点,所以我有几个问题:
节点: v0.8.2;表示: v3.05
发布于 2013-04-05 15:28:48
function requireHTTPS(req, res, next) {
if (!req.secure) {
//FYI this should work for local development as well
return res.redirect('https://' + req.get('host') + req.url);
}
next();
}
app.use(requireHTTPS);
app.get('/', routeHandlerHome);
中间件方法将会起作用,因为express将在运行路由器之前按添加的顺序运行中间件,并且通常这种站点范围的策略作为中间件与通配符路由相比更干净。
关于嗅探会话cookies的问题2,必须通过在设置时将cookies标记为secure
来解决。如果它们没有被标记为安全,浏览器也会用HTTP请求传输它们,从而使它们暴露在嗅探之下。
发布于 2013-04-04 23:21:52
您可以简单地使用您的https_redirect函数(尽管稍作修改)来自动重定向所有安全请求:
// force https redirect
var https_redirect = function () {
return function(req, res, next) {
if (req.secure) {
if(env === 'development') {
return res.redirect('https://localhost:3000' + req.url);
} else {
return res.redirect('https://' + req.headers.host + req.url);
}
} else {
return next();
}
};
};
app.use(https_redirect());
app.get('/', routeHandlerHome);
发布于 2015-12-15 05:08:18
我使用这个简单的代码根据应用程序是在开发中还是在生产中来重定向请求。
// force https redirect
var forceHTTPS = function () {
return function(req, res, next) {
if (!req.secure) {
if (app.get('env') === 'development') {
return res.redirect('https://localhost:3001' + req.url);
} else {
return res.redirect('https://' + req.headers.host + req.url);
}
} else {
return next();
}
};
};
https://stackoverflow.com/questions/15813677
复制相似问题