我最近尝试在节点/快速服务器上设置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);
});
这似乎工作正常。但是,因为在我有几个问题之前我没有涉足这个问题:
node:v0.8.2;表达:v3.05
答案 0 :(得分:43)
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将在运行路由器之前按添加的顺序运行中间件,并且通常这种站点范围的策略比中间件与通配符路由更清晰。
关于嗅探会话cookie的问题2,必须通过在设置时将cookie标记为secure
来解决。如果它们没有被标记为安全,浏览器也会使用HTTP请求传输它们,从而使它们暴露在嗅探中。
答案 1 :(得分:2)
您可以简单地使用您的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);
答案 2 :(得分:0)
我使用这个简单的代码来重定向请求,具体取决于应用程序是在开发还是生产中。
FragmentManager mgr = PlaybackFrag.this.getActivity().getSupportFragmentManager();
if (mgr.getBackStackEntryCount() > 0) {
// Want to go back to SocialViewFragment !!!
mgr.popBackStack(SocialViewFragment.FRAG_TAG, 0); // returns False - can't find the tag!
}