Я пытаюсь использовать свой (совместимый с CORS) сервис RESTful
@Path("/greeting")
@GET
@Produces("application/json")
public Response greeting() {
String result = "{\"id\":1,\"content\":\"Hello, World!\"}";
return Response.ok() //200
.entity(result)
.header("Access-Control-Allow-Origin", "*")
.build();
}
из моего приложения AngularJS.
function ($scope, $http) {
$scope.dashboard = "ESCO Dashboard";
console.log('start');
// Simple GET request example:
$http({
method: 'GET',
url: 'http://localhost:8080/NobelGrid/api/users/greeting'
}).then(function successCallback(response) {
console.log('success');
$scope.greeting = response.data;
}, function errorCallback(response) {
console.log('error');
});
console.log('end');
}
но у меня есть эта ошибка:
XMLHttpRequest не может загрузить http://localhost:8080/NobelGrid/api/users/greeting. . Ответ на предварительный запрос не проходит проверку управления доступом: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Таким образом, доступ к источнику 'http://localhost:63342' запрещен.
Используя консольную сеть Chrome, это кажется правдой, потому что заголовок ответа:
В любом случае, доступ к службе REST из браузера, а не из приложения Angular, заголовок правильный
Я также пробовал этот учебник:
https://spring.io/guides/gs/using-rest-angularjs/< /а>
с их сервисом RESTful (также совместимым с CORS, по их словам), но результат тот же.
PS: я использую WebStorm в качестве IDE.
ОБНОВЛЕНИЕ – РЕШЕНО
Написание этого обработчика на стороне сервера:
@Path("/greeting")
@OPTIONS
@Produces("application/json")
public Response greetingOPT() {
return Response.status(200) //200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS")
.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia,Authorization")
.build();
}
оно работает. В начале выдает мне другую ошибку:
Поле заголовка запроса Авторизация не разрешена Access-Control-Allow-Headers в предварительной проверке [..]
но добавление Authorization
к Access-Control-Allow-Headers
GET и POST решает проблему.