Заголовок CORS 'Access-Control-Allow-Origin' отсутствует
Я вызываю эту функцию из формы asp.net и получаю следующую ошибку на консоли firebug при вызове ajax.
Запрос на перекрестный запрос заблокирован: политика одинакового происхождения запрещает чтение удаленного ресурса в http://anotherdomain/test.json. (Причина: заголовок CORS "Access-Control-Allow-Origin" отсутствует).
var url= 'http://anotherdomain/test.json';
$.ajax({
url: url,
crossOrigin: true,
type: 'GET',
xhrFields: { withCredentials: true },
accept: 'application/json'
}).done(function (data) {
alert(data);
}).fail(function (xhr, textStatus, error) {
var title, message;
switch (xhr.status) {
case 403:
title = xhr.responseJSON.errorSummary;
message = 'Please login to your server before running the test.';
break;
default:
title = 'Invalid URL or Cross-Origin Request Blocked';
message = 'You must explictly add this site (' + window.location.origin + ') to the list of allowed websites in your server.';
break;
}
});
Я сделал альтернативный путь, но все еще не смог найти решение.
Примечание. У меня нет прав на сервер, чтобы сделать изменения на стороне сервера (API/URL).
Ответы
Ответ 1
Обычно это происходит при попытке доступа к ресурсам другого домена.
Это функция безопасности, позволяющая избежать свободного доступа всех пользователей к любым ресурсам этого домена (к ним можно получить доступ, например, чтобы иметь точно такую же копию вашего сайта в пиратском домене).
Заголовок ответа, даже если он 200OK, не позволяет другим источникам (доменам, портам) получить доступ к ресурсам.
Вы можете решить эту проблему, если вы являетесь владельцем обоих доменов:
Решение 1: через .htaccess
Чтобы изменить это, вы можете написать это в .htaccess запрошенного файла домена:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
Решение 2: правильно установить заголовки
Если вы установите это в заголовке ответа запрашиваемого файла, вы разрешите всем доступ к ресурсам:
Access-Control-Allow-Origin : *
ИЛИ ЖЕ
Access-Control-Allow-Origin : http://www.my-domain.com
Мир и кодекс;)
Ответ 2
в вашем запросе ajax, добавив:
dataType: "jsonp",
после строки:
type: 'GET',
должна решить эту проблему.
надеюсь, что это поможет вам
Ответ 3
Вам необходимо изменить код на стороне сервера, как указано ниже
public class CorsResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
responseContext.getHeaders().add("Access-Control-Allow-Origin","*");
responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
}
}
Ответ 4
Вы, должно быть, поняли, почему вы получаете эту проблему после прохождения вышеупомянутых ответов.
self.send_header('Access-Control-Allow-Origin', '*')
Вам просто нужно добавить вышеуказанную строку на стороне вашего сервера.
Ответ 5
На стороне сервера поместите это поверх .php:
header('Access-Control-Allow-Origin: *');
Вы можете установить определенные ограничения доступа к домену:
header('Access-Control-Allow-Origin: https://www.example.com')
Ответ 6
Ваш браузер не позволяет ваш запрос.. вам нужно установить на свой веб-браузер
Для Chrome: https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en
Для Firefox https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/
Лучший способ вы можете добавить заголовок на стороне сервера
Access-Control-Allow-Origin: *