【问题标题】:How to resolve CORS issue while requesting data from API using jquery AJAX and JAVA Backend如何在使用 jquery AJAX 和 JAVA 后端从 API 请求数据时解决 CORS 问题
【发布时间】:2017-07-24 05:09:27
【问题描述】:

我正在构建一个前端来显示从 API 获取的数据。该 API 由 android 工程师使用 JAVA 和 Swagger.io 创建。虽然 API 尚未经过身份验证,但我们计划使用标头(appID、版本、empID 和令牌)进行身份验证。

我正在努力解决此 API 调用中的 CORS 问题。当我发送没有任何标头的请求时,我得到了结果,但是当我对标头(如上所述)执行相同操作时,我得到了这个错误

OPTIONS
buyer.html:1 XMLHttpRequest cannot load https://some- dummy-link.com/fetchAreaCode. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is
present on the requested resource. Origin 'http://localhost:8081' is therefore not allowed access. The response had HTTP status code 403.

这些标头是在服务器端设置的:

resp.setContentType("application/json");
resp.addHeader("Access-Control-Allow-Origin", "*");
resp.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-
With, Content-Type, Accept, appID, empID, version, token");
resp.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, 
OPTIONS, HEAD");

我知道问题在于预检 OPTIONS 请求。我尝试在 doOptions servlet 中添加标头,但没有成功

我的客户端代码是这样的:

$.ajax({
         method: "GET",
         url: url,
         data: parameters,
         headers : 
           "appID" : "8",
           "version" : "3",
           "empID": localStorage.empID,
           "token" : localStorage.accessToken,
         beforeSend : beforeSend,
         complete : complete,
         success: newCallback,
         error: onRequestFailure
     });

我正在从另一个运行正常的域调用另一个 API,因此问题可能仅出在服务器端。

更新:

在 jquery AJAX 方法中使用 'contentType : 'application/json' 时,我得到了这个

OPTIONS  
buyer.html:1 XMLHttpRequest cannot load https://some-
dummy-link.com/fetchAreaCode. 
Response to preflight request doesn't 
pass access control check: No 'Access-Control-Allow-Origin' header is  
present on the requested resource. Origin 'http://localhost:8081' is 
therefore not allowed access. The response had HTTP status code 403.

【问题讨论】:

  • I have tried adding headers in doOptions servlet but no luck - 这是什么意思? doOptions 是处理 OPTIONS 请求的东西吗?
  • 正在使用 MVC API
  • 不知道(开发API的是安卓工程师)
  • @JaromandaX 不知道。我在stackoverflow上搜索时遇到了这个
  • 它奏效了,在 doOptions、doPost 和 doGet servlet 中添加了标头并且它奏效了。

标签: javascript java jquery ajax api


【解决方案1】:

[在此处输入链接描述][1] 你好,去那里看看 javascript 面板。那里放了我的服务器端示例和 ajax 方法。

  [1]: https://jsfiddle.net/npathak56/ct5myj08/

【讨论】:

  • 我已经告诉后端工程师按照您的建议进行必要的更改。正在部署的后端会在部署后立即通知您结果。
猜你喜欢
  • 2019-12-03
  • 2017-07-18
  • 2022-06-12
  • 2014-09-13
  • 2017-01-29
  • 2015-02-27
  • 1970-01-01
  • 2015-12-15
相关资源
最近更新 更多