【发布时间】: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