Node.js Node/express-如何在不被CORS阻止的情况下强制HTTPS
我正在使用Cloud9和Heroku开发一个基于平均堆栈的web应用程序。我希望所有用户都必须使用HTTPS,我发现了一种使用Express中间件的好方法:Node.js Node/express-如何在不被CORS阻止的情况下强制HTTPS,node.js,express,heroku,https,Node.js,Express,Heroku,Https,我正在使用Cloud9和Heroku开发一个基于平均堆栈的web应用程序。我希望所有用户都必须使用HTTPS,我发现了一种使用Express中间件的好方法: app.use(function(req,res,next) { if(req.headers["x-forwarded-proto"] == "http") { console.log("HTTP call detected, not allowed); return res.redirect('https
app.use(function(req,res,next) {
if(req.headers["x-forwarded-proto"] == "http") {
console.log("HTTP call detected, not allowed);
return res.redirect('https://' + req.hostname + req.path);
} else {
console.log("HTTPs call detected, allowed");
return next();
}
我希望这能适用于我收到的所有GET、POST、PUT和DELETE请求,我认为对HTTP的任何调用都应该重定向到相同的、相应的HTTPS请求
现在,虽然这本身似乎起作用,但我得到了CORS策略错误
无法加载XMLHttpRequest
. 不
“Access Control Allow Origin”标头出现在请求的服务器上
资源。来源“”是
因此不允许访问。响应的HTTP状态代码为401
现在我确实理解了这样一个概念,即这是防止跨域请求的标准CORS策略,但我不确定应该如何处理这一点。我认为这将作为一个相同的域请求,但显然不是
我已经看到一些人认为第二台服务器应该运行并捕获HTTP流量、重定向,但我只使用一台服务器。我不明白为什么这样不行
非常感谢您的帮助
问候
function requireHTTPS(req, res, next) {
if (!req.secure) {
return res.redirect('https://' + req.get('host') + req.url);
}
next();
}
app.use(requireHTTPS);
这对我有用
这对我很有效。我现在强制使用HTTPS流量,但我认为我没有解决实际问题。我现在使用的是:
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 {
console.log("HTTPS call detected");
return next();
}
});
这似乎有效地强制了严格的TLS,可能是因为头部的变化。然而,这也意味着重定向似乎永远不会发生——对“http”的测试总是错误的。因此,COTS重定向策略的问题仍然存在
这就是我真正想要的一些输入-我应该添加一些允许跨域请求的策略吗?这听起来不安全,为什么?我在同一个域上,我只想要HTTPS
任何输入都值得赞赏。我现在强制使用HTTPS通信,但我认为我没有解决实际问题。我现在使用的是:
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 {
console.log("HTTPS call detected");
return next();
}
});
这似乎有效地强制了严格的TLS,可能是因为头部的变化。然而,这也意味着重定向似乎永远不会发生——对“http”的测试总是错误的。因此,COTS重定向策略的问题仍然存在
这就是我真正想要的一些输入-我应该添加一些允许跨域请求的策略吗?这听起来不安全,为什么?我在同一个域上,我只想要HTTPS
欢迎您的任何意见