@ff0xff

Почему не работает крос доменный запрос?

Доброе всем время суток, пытаюсь сделать крос доменный запрос
тестирую в Firefox Quantum
$.ajax({
                url: url,
                xhrFields: {
                    withCredentials: true
                },
                success: function(data) {
                    data = JSON.parse(data);
                    console.log(data);
                    if (data.length == 0) {
                        console.log('Came an empty array');
                        $("detailing").html(' <div class="row"><div class="col-sm-12"><center><h3>Нет детализации</h3></center></div></div>');
                    }
                }
            });

делаю GET запрос на домен
Host: parser.test1.isan.pro
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost/index.php/admin/phones
Origin: http://localhost
DNT: 1
Connection: keep-alive

Получаю ответ:
HTTP/1.1 200 OK
Date: Fri, 14 Dec 2018 06:06:15 GMT
Server: Apache/2.4.18 (Ubuntu)
Cache-Control: no-cache, private
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
X-Debug-Token: 78a6a1
X-Debug-Token-Link: http://example.pro/index.php/_profiler/78a6a1
Content-Length: 2
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json


Не смотря на то что указаны заголовки
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, OPTIONS, HEAD

И приходит ответ ( тело ответа можно прочитать там нормальный json )
В консоли js всеравно выводит сообщение

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at example.pro/index.php/api/phone?number=96176214270. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘*’).[Подробнее]


И скрипт падает... Почему так происходит как это победить? заголовками это не лечится и я не знаю что делать.
Какие есть идеи?
  • Вопрос задан
  • 319 просмотров
Пригласить эксперта
Ответы на вопрос 3
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
у Вас стоит опция withCredentials: true - которая говорит браузеру, что Вы хотите отправлять куки стороннему ресурсу. В этом плане более строгая политика CORS:
1. заголовок ответа Access-Control-Allow-Origin не может быть вилдкард (*), сервер должен отвечать точным origin
2. должен присутствовать заголовок ответа Access-Control-Allow-Credentials: true

по итогу сервер должен ответить следующими заголовками:
Access-Control-Allow-Origin: {request.headers.Origin}
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
Access-Control-Allow-Credentials: true

где {request.headers.Origin} - заголовок Origin из запроса
Ответ написан
Комментировать
гугл хром?
у него есть проблемы например с подргузкой аяксом из локального файла
нужно вырубать какой то пунктик в глубоких настройках
Ответ написан
RhesusNegative
@RhesusNegative
Negative
вставь в обработчик в самое начало header('Access-Control-Allow-Origin: *');
и отправляй jsonp
мне помогло
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы