Для контекста: я пытаюсь вызвать межсайтовый вызов API, который требует аутентификации пользователя с помощью базовой аутентификации.
Tomcat (7.0.43), обслуживающий API, настроен на разрешение вызовов между источниками с аутентификацией.
Я использую jquery.ajax, передавая следующие параметры:
xhrOtpions = {
url: "http://localhost:8080/api/v1/ressource",
dataType: 'json',
username: "user",
password: "pass",
xhrFields: {
withCredentials: true
}
}
В Chrome (45) запрос выполняется успешно, в Firefox (41) запрос не отправляется, и отображается сообщение об ошибке Доступ к ограниченному URI запрещен
Чтобы вызов работал в Firefox, я изменяю параметры, чтобы применить то, что я прочитал из связанной проблемы jQuery на GitHub:
xhrActiveBuilds = {
url: "http://localhost:8080/api/v1/ressource",
dataType: 'json',
username: "user",
password: "pass",
xhrFields: {
withCredentials: true
},
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic ")
}
}
Это ничего не меняет для FF, ошибка все та же.
В Chrome теперь отправлен предварительный запрос OPTIONS, который завершается с ошибкой с кодом запрещенного ответа 403.
Ниже конфигурации фильтра CORS сервера Tomcat:
CorsFilter
org.apache.catalina.filters.CorsFilter
cors.allowed.origins
http://localhost:1081
cors.allowed.methods
GET,POST,HEAD,OPTIONS,PUT
cors.allowed.headers
Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers
cors.exposed.headers
Access-Control-Allow-Origin,Access-Control-Allow-Credentials,Access-Control-Allow-Authorization
cors.support.credentials
true
cors.preflight.maxage
10
CorsFilter
/*
Подробнее здесь: https://stackoverflow.com/questions/330 ... all-with-b