我使用角8 HttpClient向地理编码器API发出GET请求。但是,由于CORS飞行前请求失败,浏览器阻止了该请求。
CORS策略阻止了来自“CODE]&country=hkg&language=en-GB&searchtext=royal%20view%20hotel”的对CODE]&country=hkg&language=en-GB&searchtext=royal%20view%20hotel的访问:对飞行前请求的响应不通过访问控制检查:它没有HTTP状态。
(出于明显的原因,我的实际应用程序id和应用程序代码在上面的消息中被APP_ID和APP_CODE替换了)
据我所知(在阅读了https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS之后),飞行前请求是作为OPTIONS请求由浏览器发送的。并且浏览器失败了来自HERE API服务器的(飞行前)响应,因此阻塞了最初的GET请求。
这是否是这里API服务器不正确地响应飞行前选项请求的问题?
如果是这样的话,会有人建议一个好的方法来模拟飞行前的请求,从这里来检查响应API吗?
更新-模拟飞行前请求
我试图模拟一个来自邮递员的飞行前请求,以查看这里的API服务器是如何响应的。
请求详细信息如下。
请求类型:OPTIONS
网址:https://geocoder.api.here.com/6.2/geocode.json
头旁:
访问-控制-请求-方法:获取 访问-控制-请求-标头:源,x-请求-与 产地:http://localhost:4201
对上述请求的答复。
状态:404
回应机构:
<ns2:Error xmlns:ns2="http://www.navteq.com/lbsp/Errors/1" type="PermissionError" subtype="InvalidCredentials">
<Details>invalid credentials for </Details>
</ns2:Error>
如果我试图将查询参数包含到URL中(包括app_id和app_code),如下所示:
https://geocoder.api.here.com/6.2/geocode.json?app view 酒店
返回相同的错误状态(404)。反应体看起来是这样的:
<ns2:Error xmlns:ns2="http://www.navteq.com/lbsp/Errors/1" type="PermissionError" subtype="InvalidCredentials">
<Details>invalid credentials for XXXXXXXXXXXXX</Details>
</ns2:Error>其中,XXXXXXXXXXXXX是我的app_id参数值。显然,这个值替代了我的实际app_id,它是有效的,在正常的GET请求中从Postman运行时返回结果。
除非我在模拟飞行前请求时遗漏了什么,否则这里的API服务器似乎没有正确地响应预飞请求。
如有任何帮助和建议,我将不胜感激。
发布于 2020-01-24 10:11:57
这里的Geocoder通常不支持OPTIONS方法,但是应该可以使用jsonp方法来解决CORS问题。非常确定角有一些支持jsonp的库,在这个线程中描述了一种方法:How to make a simple JSONP asynchronous request in Angular 2?
https://stackoverflow.com/questions/57492820
复制相似问题