正如标题中所述。我在使用CORS时遇到很多问题,并在简单的GET请求上使用了第三方API。
在我的浏览器和Powershell中,我可以直接使用相同的URL访问API,并获得JSON数据。当我使用HttpClient将其包装到Angular请求中时,出现CORS错误。
我无法修改服务器,也找不到适合我的用例的答案。
在检查网络流量后,我试图修改标题以匹配浏览器发送的内容:
return this._http.get<FullResponse>(finalEndpoint,
{
headers: new HttpHeaders({
'Host': 'api.<third party>.com',
'Accept-Encoding': 'gzip, deflate, br',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive'
})
});
但是我得到了错误:
Refused to set unsafe header "Host"
Refused to set unsafe header "Accept-Encoding"
Refused to set unsafe header "Connection"
同时仍然出现CORS错误。
Access to XMLHttpRequest at 'https://<GET URL>' from origin 'Localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我有什么选择?
答案 0 :(得分:1)
不允许设置主机,接受编码和连接头。出于安全原因,只能由用户代理设置它们。请参阅forbidden header names的列表。您应该尝试找出通过HttpClient发送请求时收到的原始CORS错误。
更新:
由于您无法与第三方联系以更改配置,因此另一个选择是使用其他服务器代理API请求。如果您在xyz.com上已经有服务器,则可以创建一个端点,如xyz.com/3rdPartyAPI,然后将请求发送到那里。然后,在服务器上,您可以使用curl或wget或其他方式以通常的方式请求内容,然后将响应转发回客户端。