Чтобы решить проблему CORS, я написал там
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header("Access-Control-Allow-Headers: X-Requested-With");
на моем сайте сервера
но во время моего развития я вижу эту ошибку
The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. Origin 'http://localhost' is therefore not allowed access.
Я думал, разрешить происхождение: * все решит? Но почему в заголовке указано несколько значений?
Это распространенная проблема при случайном включении CORS дважды. Убедитесь, что вы не включили его в apache или что заголовок не устанавливается дважды. В качестве проверки работоспособности вы можете попытаться удалить заголовок и добавить его обратно, прежде чем отправлять ответ.
Пример:
header_remove('Access-Control-Allow-Origin');
header('Access-Control-Allow-Origin: *');
Из-за ограничений безопасности браузера большинство запросов Ajax подчиняются той же политике происхождения; запрос не может успешно получить данные из другого домена, субдомена, порта или протокола. Но запросы Script и JSONP не подчиняются тем же ограничениям политики происхождения.
Если вы еще не использовали JSONP. Википедия говорит
JSONP или «JSON with padding» является дополнением к базовым данным JSON
формат, шаблон использования, который позволяет странице запрашивать и многое другое
целесообразно использовать JSON с сервера, отличного от основного.
Итак, ваш вызов ajax должен быть таким:
$.ajax({
type: 'GET',
crossOrigin: true,
dataType: "jsonp",
url: url,
success: function(data) {
console.log(data);
}
});
Использование * не будет работать. Приведенный ниже код PHP будет принимать все запросы от всех доменов и работает в IE, Firefox, Chrome и Safari.
$origin=isset($_SERVER['HTTP_ORIGIN'])?$_SERVER['HTTP_ORIGIN']:$_SERVER['HTTP_HOST'];
header('Access-Control-Allow-Origin: '.$origin);
header('Access-Control-Allow-Methods: POST, OPTIONS, GET, PUT');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Authorization, X-Requested-With');
header('P3P: CP="NON DSP LAW CUR ADM DEV TAI PSA PSD HIS OUR DEL IND UNI PUR COM NAV INT DEM CNT STA POL HEA PRE LOC IVD SAM IVA OTC"');
header('Access-Control-Max-Age: 1');
Прием запросов от всех доменов небезопасен. Для лучшего (но немного более сложного) решения смотрите здесь: CORS, который работает в IE, Firefox, Chrome и Safari