预检的响应具有无效的HTTP状态代码400

Roy*_*tin 5 javascript java ajax cors dropwizard

我正在尝试使用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>
Run Code Online (Sandbox Code Playgroud)

最初我收到此错误:XMLHttpRequest无法加载http:// localhost:port/service/myservice.对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-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, "/*");
Run Code Online (Sandbox Code Playgroud)

添加此内容后,我的初始异常消失,但我收到以下异常:XMLHttpRequest无法加载http:// localhost:port/service/myservice.预检的响应具有无效的HTTP状态代码400

这个问题与CORS有关吗?我在这做错了什么?

UPDATE

在做了更多调试后,我发现了这种行为.发送没有Authorization标头的请求时,我收到415(不支持的媒体类型)错误.

我认为我的AJAX代码有问题,有人可以帮我找到问题吗?谢谢.

Nat*_*Lam 0

尝试将以下内容添加到您的设置中?

xhrFields: { withCredentials: true }
Run Code Online (Sandbox Code Playgroud)