【发布时间】:2017-08-10 19:30:42
【问题描述】:
我的 Angular 2 应用程序出现一个非常奇怪的错误:
XMLHttpRequest 无法加载 https://api.ebay.com/ws/api.dll。回复 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:4200” 访问。
烦人的是我确实有那个标题:
headers.append("Access-Control-Allow-Origin", "*")
headers.append('Access-Control-Allow-Methods', "GET, POST, PATCH, PUT, DELETE, OPTIONS")
headers.append('Access-Control-Allow-Headers', "Origin, Content-Type, X-Auth-Token")
【问题讨论】:
-
标头需要由您从服务器获得的响应添加。在请求中添加它们是没有用的。另见developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
-
解决方法是什么?我显然不在 eBay 工作,也无法更改他们的标题
-
不要访问不应该以这种方式使用的 API ;-) 您可以尝试使用
JsonpModule而不是HttpModule,但是这种方法有一些限制(不能自定义标头发送)。另一种方法是运行您自己的服务器,将请求转发到 Ebay 服务器并响应浏览器。 -
一种通用的解决方法是设置您自己的 CORS 代理,或者将请求 URL 替换为通过开放代理请求它的 URL,如下所示:cors-anywhere.herokuapp.com/https://api.ebay.com/ws/api.dll