对预检请求的角度响应未通过访问控制检查

时间:2017-08-01 11:57:24

标签: angular cors preflight

我遇到https://od-api.oxforddictionaries.com:443/api/v1/entries/en/ace/pronunciations API问题我在其他API上使用过此代码。 我试图使用POSTMAN及其工作。所以我认为问题出在我的代码上。

getWord(word) {
  let headers = new Headers();
  headers.append('Accept','application/json');
  headers.append('app_id','xxxxxx');
  headers.append('app_key','xxxxx');

  return this._http.get('https://od-api.oxforddictionaries.com:443/api/v1/entries/en/ace/pronunciations',{headers:headers})
     .map(res => res.json());
}

错误:

enter image description here

1 个答案:

答案 0 :(得分:1)

请注意错误消息的一部分:

The response had HTTP status code 403.

表示身份验证失败。

这可能只是意味着您没有在必要的app_idapp_key请求标头中提供有效值。如果需要,请检查这些值并(重新)注册或生成新的API密钥。

否则,https://od-api.oxforddictionaries.com API端点的响应确实包含Access-Control-Allow-Origin响应标头,包括OPTIONS响应:

$ curl -X OPTIONS -i \
   --header "Origin: http://example.com" \
   --header "Access-Control-Request-Headers: app_id, app_key" \
   --header "Access-Control-Request-Method: GET" \
   --header "app_id: 023xxxxx" \
   --header "app_key: e6a772cxxxxxxxxxxxxxxxxxxxxxxxxx" \
   "https://od-api.oxforddictionaries.com/api/v1/entries/en/ace/pronunciations"

HTTP/1.1 200 OK
Access-Control-Allow-Headers: app_id
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: http://example.com
Allow: HEAD, OPTIONS, GET
Content-Type: text/html; charset=utf-8
Date: Tue, 01 Aug 2017 22:49:53 GMT
Server: openresty/1.9.7.4
version: v1.1.0-601-g45837e9
Content-Length: 0
Connection: keep-alive

因此,如果您修复代码以发送有效的app_idapp_key请求标头值,那么它应该可以正常工作。