我正在尝试使用AJAX进行REST调用(POST)。这是我的AJAX代码预检的响应具有无效的HTTP状态代码400
<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。对预检请求的响应不会通过访问控制检查:请求的资源上不存在“访问控制 - 允许来源”标头。因此不允许原产地'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相关吗?我在这里做错了什么?
UPDATE
做更多的调试后,我发现这种行为。当发送没有授权标题的请求时,我收到415(不支持的介质类型)错误。
我认为我的AJAX代码有问题,有人可以帮我找到问题吗?谢谢。