我是Node和Angular的新手。发送请求withCredentials: true
选项时,Cors出现问题。当我发送此类请求时,我得到:
响应中“ Access-Control-Allow-Origin”标头的值 当请求的凭据模式为时,不得为通配符'*' “包含”。`。
在发送不带此选项的请求时,我没有错误。 Angular正在http://localhost:4200上工作,而Nodejs正在http://localhost:1234上工作。似乎cors模块无法正常工作。
在NodeJs服务器中,我使用cors
模块:
const cors = require('cors');
const corsOptions = {
origin: 'http://localhost:4200',
optionsSuccessStatus: 200,
credentials: true
};
app.use(cors(corsOptions));
服务器上的请求头:
{ 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' }
编辑:像在私有模式下运行浏览器这样的简单事情解决了此问题...
答案 0 :(得分:2)
您可以通过设置标头来尝试:
app.use(function (req, res, next) {
// UI port you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4200');
...
}
UI:
this.http.get(url, { withCredentials: true })
当我们将凭据传递给后端服务时,必须指定url端口。
答案 1 :(得分:1)
我遇到了同样的问题,不是在这个模块上,而是在开发模式下使用另一台服务器时发送凭据。我认为问题可能出在不安全的连接(http
而不是https
)中,当然,本地主机始终是被优先处理的。
我使用代理(proxy.conf.json
为我解决了此问题,将URL重新路由到预期的URL,使浏览器在开发时认为它是相同的来源。
(此处描述:ANGULAR BUILD GUIDE)
{
"/api": {
"target": "http://THE_OTHER_URL/WITH/PATH/",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
}
并将其包含在该项目的构建选项下的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"
}
}
},
...
}
}
我不确定这是否还能解决您的问题,但也许值得一试。
答案 2 :(得分:1)
在节点中启用跨源资源共享(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");
});