Ошибка доступа: отсутствует заголовок 'Access-Control-Allow-Origin' в запрашиваемом ресурсе
Я пытаюсь отправить Ajax-запрос на сервер Tomcat из моего приложения, но получаю следующую ошибку (мое веб-приложение работает в Chrome):
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403.
Я пытался использовать:
'Access-Control-Allow-Origin' : 'http://localhost:8080/app',
но это не сработало.
Вот мой код Ajax:
var arr = [1];
$.ajax({
url: 'http://localhost:8080/app',
type: 'POST',
contentType:'application/json',
headers: {
'Access-Control-Allow-Origin' : 'http://localhost:8080',
},
data: JSON.stringify(arr[0]),
success: function(data){
// При успешном выполнении ajax сделать это
alert(data);
}
});
Как я могу решить эту проблему с CORS?
2 ответ(ов)
Чтобы выполнять кросс-доменные AJAX-запросы, запрашиваемый сервер должен разрешать кросс-оригинальное совместное использование ресурсов (CORS). Вы можете подробнее узнать об этом по следующей ссылке: http://www.html5rocks.com/en/tutorials/cors/
В вашем случае вы устанавливаете заголовки на клиенте, но эти заголовки должны быть установлены на стороне сервера, работающего по адресу http://localhost:8080/app.
Если вы используете сервер PHP с Apache, вам нужно добавить следующее в ваш файл .htaccess
:
Header set Access-Control-Allow-Origin "*"
Это позволит вашему клиенту отправлять запросы к серверу, находящемуся на другом домене.
В случае запроса к REST-сервису:
Вам необходимо разрешить CORS (кросс-доменный обмен ресурсами) на конечной точке вашего REST-сервиса с помощью аннотации Spring:
@CrossOrigin(origins = "http://localhost:8080")
Очень хороший учебник: https://spring.io/guides/gs/rest-service-cors/
Как загружать файлы асинхронно с помощью jQuery?
Как заставить jQuery выполнять синхронный запрос Ajax вместо асинхронного?
Прокрутка до низа div?
Отправка POST-данных с помощью XMLHttpRequest
Как отправить POST-запрос между доменами с помощью JavaScript?