【发布时间】:2016-01-18 19:23:17
【问题描述】:
我正在尝试使用 AJAX 进行 REST 调用 (POST)。这是我的 AJAX 代码
<script>
var settings = {
"async": true,
"crossDomain": true,
"dataType": "json",
"url": "http://localhost:port/service/myservice",
"method": "POST",
"data": '{jsondata}',
"headers": {
"accept": "application/json",
"Authorization": "authValue"
}
}
$.ajax(settings)
.done(function (response) {
console.log(response);
});
</script>
最初我收到此错误:XMLHttpRequest 无法加载http://localhost:port/service/myservice。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应的 HTTP 状态代码为 400。
为了解决这个问题,我在 dropwizard 应用程序中添加了以下代码
Dynamic filter = env.servlets().addFilter("CORS", CrossOriginFilter.class);
filter.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,PUT,POST,DELETE,OPTIONS");
filter.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
filter.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "*");
filter.setInitParameter("allowedHeaders", "Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin");
filter.setInitParameter("allowCredentials", "true");
filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
添加后,我的初始异常消失了,但出现以下异常:XMLHttpRequest 无法加载http://localhost:port/service/myservice。预检响应包含无效的 HTTP 状态代码 400
这个问题与 CORS 有关吗?我在这里做错了什么?
更新
在进行更多调试后,我发现了这种行为。发送没有授权标头的请求时,我收到 415 (Unsupported Media Type) 错误。
我认为我的 AJAX 代码有问题,有人可以帮我找出问题吗?谢谢。
【问题讨论】:
标签: javascript java ajax cors dropwizard