@zlodiak

Почему xhr-запрос завершается ошибкой?

Я настроил не фронте и беке возможность получить и записать куку через кроссдоменный запрос. В результате после того как с фронта уходит запрос и возвращается с кодом 200 кука записывается в хранилище браузера.

Но при этом xhr-запрос падает с ошибкой. Это выражается в том, что срабатывает обработчик xhr.onerror. При этом обработчик xhr.onload не отрабатывает.

Помогите пожалуйста разобраться почему так происходит.

Вот код ajax-запроса:
const xhr = new XMLHttpRequest();
    xhr.withCredentials = true;
    xhr.open('GET', Config.host + 'users/display_form', true);
    xhr.onload = function() {
      alert( 'xhr req ok' );
    }
    xhr.onerror = function() {
      console.log( 'Ошибка ' + this);
      console.dir(this);
    }
    xhr.send();


Вот код контроллера на бекенде:
def display_form(request):
		response = HttpResponse('set csrf cookie for form')
		rotate_token(request)   # здесь генерируется свежая кука и помещается в соответствующий заголовок ответа
		response['Access-Control-Allow-Origin'] = 'http://localhost:4200'
		response['Access-Control-Allow-Credentials'] = 'true'
		response['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, X-CSRF-TOKEN'
		return response


Вот скрины http-отладчика в браузере:
5b465cbc1dd93445223864.png
5b465cc17cd77810308054.png
5b465cc85004c640055631.png
  • Вопрос задан
  • 1560 просмотров
Решения вопроса 1
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
Всё же написано. Сервер не отдаёт заголовок php header('Access-Control-Allow-Origin: *')
Лечение - https://ru.stackoverflow.com/questions/482217/php-...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@MrResilient
Студент-программист
В код особо не вчитывался, так как ошибка в большинстве случаев в другом. В браузере по умолчанию прописана защита от таких запросов, то есть если бы твой запрос выполнялся с хоста, то скорее всего все было бы ок. Я знаю целых 2 решения, существует их мб и больше. Первое это установить это расширение https://chrome.google.com/webstore/detail/allow-co... (если ты пользуешься хромом), а второе это прописать следующие строки в конфигах браузера --disable-web-security --user-data-dir (в свойствах, в поле "объект", через пробел от того, что там уже имеется)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 15:28
10000 руб./за проект
29 мар. 2024, в 15:11
50000 руб./за проект
29 мар. 2024, в 15:06
50000 руб./за проект