我从Angular2应用程序调用外部rest API,我在响应中收到此错误:
Request header field X-XSRF-TOKEN is not allowed by Access-Control-Allow-Headers in preflight response.
当我无法控制服务器时,我能做些什么吗?
以下是我要做的事情:
this._http.get('https://api-v3.mojepanstwo.pl/dane/wojewodztwa')
.map(res=>res.json())
.subscribe(
success=>{
console.log(success);
}
)
当我尝试在POSTMAN中对此endopint进行GET方法时,它可以正常工作。在Chrome中,它会引发上述错误。
这似乎只是Chrome的问题 - 它适用于Safari和Firefox。
当我使用jQuery获取响应时,它工作正常:
$.get("https://api-v3.mojepanstwo.pl/dane/wojewodztwa", function(data){
console.log(data);
})
答案 0 :(得分:4)
我的猜测是你有某种http拦截器,它会为你的所有(获取?)http请求添加X-XSRF-TOKEN
。我刚试过它,如果我没有在我的请求标题中添加任何内容,这就像一个魅力:
getData() {
return this.http.get('https://api-v3.mojepanstwo.pl/dane/wojewodztwa')
.map(response => response = response.json());
}
ngOnInit() {
this.appService.getData().subscribe(data => {
this.data = data;
});
}
但是,如果我向标头请求添加任何内容,我会得到与您相同的错误。例如,我刚刚添加了名为Something
的标头和值Something
:
headers: Headers = new Headers({ 'Something': 'Something' });
getData() {
return this.http.get('https://api-v3.mojepanstwo.pl/dane/wojewodztwa', {
headers: this.headers
})
.map(response => response = response.json());
}
ngOnInit() {
this.appService.getData().subscribe(data => {
this.data = data;
});
}
这将产生您获得的错误:
请求标头字段不允许 预检响应中的Access-Control-Allow-Headers。
为了清楚起见,我在Chrome中对此进行了测试。