我在从 Node.js 服务器获取数据时遇到问题。
客户端是:
public getTestLines() : Observable<TestLine[]> {
let headers = new Headers({ 'Access-Control-Allow-Origin': '*' });
let options = new RequestOptions({ headers: headers });
return this.http.get('http://localhost:3003/get_testlines', options)
.map((res:Response) => res.json())
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}
在服务器端我还设置了标题:
resp.setHeader('Access-Control-Allow-Origin','*')
resp.send(JSON.stringify(results))
但我收到一个错误
“XMLHttpRequest 无法加载http://localhost:3003/get_testlines http://localhost:3003/get_testlines。
对预检请求的响应未通过访问控制检查:否
请求中存在“Access-Control-Allow-Origin”标头
资源。起源 'http://本地主机:3000 http://localhost:3000' 因此不允许
使用权。”
我该如何修复它?当我删除标头时,它说该标头是必需的。
Access-Control-Allow-Origin
is a response标头,而不是请求标头。
您需要将其显示在响应中,而不是请求中。
您已尝试将其放在响应中:
resp.setHeader('Access-Control-Allow-Origin','*')
……但这并没有奏效。
这可能是因为您没有将其放在对正确请求的响应中。错误消息显示:
响应飞行前请求未通过访问控制检查
你已经完成了某物使请求预检。这意味着浏览器在发出您尝试发出的 GET 请求之前,会发出 OPTIONS 请求。
据推测,这是由服务器上的另一段代码处理的,因此该行resp.setHeader('Access-Control-Allow-Origin','*')
没有被击中。
导致发出预检请求的原因之一是添加请求标头(少量异常除外)。添加Access-Control-Allow-Origin
to the request将触发预检请求,因此尝试解决问题的第一件事是remove Access-Control-Allow-Origin
从请求.
如果失败,那么您需要设置服务器,以便它可以响应 OPTIONS 请求以及 GET 请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)