Я пытаюсь сделать вызов REST (POST) с помощью AJAX. Это мой 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. Ответ на запрос перед полетом не проходит проверку контроля доступа. Нет заголовка «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, "/*");
После добавления этого мое первоначальное исключение ушло, но я получаю следующее исключение : XMLHttpRequest не может загрузить http://localhost:port/service/myservice. Ответ на предполетный период имеет неверный код состояния HTTP 400
Этот вопрос относится к CORS? Что я здесь делаю неправильно?
UPDATE
После делать больше отладки я нашел это поведение. При отправке запроса без заголовка авторизации я получаю 415 (Неподдерживаемый тип носителя) Ошибка.
Я думаю, что что-то не так с моим кодом AJAX, может кто-нибудь, пожалуйста, помогите мне найти проблему? Благодарю.