Node.js CORS正在使用凭据阻止请求
我不熟悉节点和角度。我在发送带有凭据的请求时遇到Cors问题:true选项。当我发送此类请求时,我得到: 响应中“Access Control Allow Origin”标头的值 当请求的凭据模式为时,不能为通配符“*” “包括”。` 当发送没有这个选项的请求时,我没有得到任何错误。Angular正在运行,Nodejs正在运行。看来cors模块不能正常工作 在NodeJs服务器中,我使用Node.js CORS正在使用凭据阻止请求,node.js,angular,cors,Node.js,Angular,Cors,我不熟悉节点和角度。我在发送带有凭据的请求时遇到Cors问题:true选项。当我发送此类请求时,我得到: 响应中“Access Control Allow Origin”标头的值 当请求的凭据模式为时,不能为通配符“*” “包括”。` 当发送没有这个选项的请求时,我没有得到任何错误。Angular正在运行,Nodejs正在运行。看来cors模块不能正常工作 在NodeJs服务器中,我使用cors模块: const cors = require('cors'); const corsOption
cors
模块:
const cors = require('cors');
const corsOptions = {
origin: 'http://localhost:4200',
optionsSuccessStatus: 200,
credentials: true
};
app.use(cors(corsOptions));
服务器上的req.headers:
{ host: 'localhost:1234',
connection: 'keep-alive',
'content-length': '44',
accept: 'application/json, text/plain, */*',
origin: 'http://localhost:4200',
'user-agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'content-type': 'application/json',
'sec-fetch-site': 'same-site',
'sec-fetch-mode': 'cors',
referer: 'http://localhost:4200/login',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7' }
编辑:像在私有模式下运行浏览器这样简单的事情似乎解决了这个问题…您可以通过如下设置标题来尝试:
app.use(function (req, res, next) {
// UI port you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4200');
...
}
用户界面:
当我们将凭据传递给后端服务时,必须指定url端口。我遇到了相同的问题,不是这个模块,而是在开发模式和使用另一台服务器时发送凭据。我认为问题可能出在不安全的连接上(
http
而不是https
),当然,localhost总是无法解决的
我使用代理(proxy.conf.json
)解决了这个问题,将url重新路由到预期的url,使浏览器在开发时认为它是同一个源。
(此处描述:)
并将其包含在该项目的构建选项下的angular.json中:
...
"projects" : {
"YOUR_PROJECT_NAME" : {
...
"architect": {
...
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"proxyConfig" : "proxy.conf.json",
"browserTarget": "YOUR_PROJECT_NAME:build"
}
}
},
...
}
}
我不确定这是否也解决了您的问题,但可能值得一试。在节点中启用跨源资源共享(CORS)。CORS本质上意味着跨域请求
只需使用这行代码在响应上设置一个标题,即可启用CORS
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
});
您可以尝试将您的源(localhost
)添加到访问控制允许源
。在短时间内,您可以禁用CORS并尝试此命令“chrome--disable web security--disable site isolation trials--user data dir=c:\chromeSession”使用cmd或Cntr+R运行此命令这只是为了交叉检查我会使用代理。谢谢,不幸的是,这没有什么区别。错误是相同的。您是否从UI传递{withCredentials:true}
?是的,当出现错误时,我传递{withCredentials:true},没有{withCredentials:true}它工作正常。嗯。。对不起,我帮不上忙了。我在.net中实现了这一点,注意节点:(
...
"projects" : {
"YOUR_PROJECT_NAME" : {
...
"architect": {
...
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"proxyConfig" : "proxy.conf.json",
"browserTarget": "YOUR_PROJECT_NAME:build"
}
}
},
...
}
}
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
});