【问题标题】:HERE Geocoder API CORS supportHERE Geocoder API CORS 支持
【发布时间】:2019-12-20 21:36:30
【问题描述】:

我正在使用 Angular 8 HttpClientHERE Geocoder API 发出 GET 请求。但由于 CORS preflight 请求失败,该请求被浏览器阻止。

访问 XMLHttpRequest 在 'https://geocoder.api.here.com/6.2/geocode.json?app_id=[APP_ID]&app_code=[APP_CODE]&country=hkg&language=en-GB&searchtext=royal%20view%20hotel' 来自原点“http://localhost:4201”已被 CORS 策略阻止: 对预检请求的响应未通过访问控制检查:它 没有 HTTP ok 状态。

(出于显而易见的原因,我的实际 app idapp code 在上述消息中已替换为 [APP_ID] 和 [APP_CODE])

据我了解(在阅读https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS 之后),预检请求 是由浏览器作为 OPTIONS 请求发送的。并且浏览器已经使 HERE API 服务器 的(预检)响应失败,因此阻止了原始 GET 请求。

这可能是 HERE API 服务器对 preflight OPTIONS 请求响应不正确的问题吗?
如果是这样,有人会建议一种模拟预检请求以检查来自 HERE API 的响应的好方法吗?

更新 - 模拟预检请求

我试图模拟来自 Postman 的 preflight 请求,以查看 HERE API 服务器的响应。

请求详情如下。
请求类型:OPTIONS
网址:https://geocoder.api.here.com/6.2/geocode.json
标头参数:

访问控制请求方法:GET
Access-Control-Request-Headers:来源,x-requested-with
来源: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_id=XXXXXXXXXXXXX&app_code=YYYYYYYYYY&country=hkg&language=en-GB&searchtext=royal view hotel

返回相同的错误状态 (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 运行时返回结果。

除非我在模拟预检请求时遗漏了一些东西,否则 HERE API 服务器似乎没有正确响应预检。

如有任何帮助和建议,我将不胜感激。

【问题讨论】:

  • 如果只需要正确测试响应,就可以在 POSTMAN 中正确测试 API 的响应代码。这是您最终的安全浏览器措施,可以禁用。可以启用 CORS(通过设置代理服务器)
  • 您好,感谢您的评论。我已经更新了我的问题,只是看到了你的评论。不知道 HERE api 服务器是否正确响应了浏览器发出的 preflight OPTIONS 请求?

标签: cors here-api angular-httpclient


【解决方案1】:

一般来说,HERE Geocoder API 不支持 OPTIONS 方法,但是应该可以使用 jsonp 方法来解决 CORS 问题。很确定 Angular 有一些支持 jsonp 的库,在这个线程中描述了一种方法:How to make a simple JSONP asynchronous request in Angular 2?

【讨论】:

    猜你喜欢
    • 2019-10-30
    • 2018-09-23
    • 2013-01-28
    • 2016-09-03
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多