Как правильно установить кроссдоменные куки?
Помогите пожалуйста понять почему несмотря на нарушение CORS кука всё же устанавливается.
Бекенд и фронтенд находятся на разных доменах. Из фронтенда я отправляю запрос на бекенд, а точнее на адрес, который отдаёт куку в виде заголовка Set-Cookie: const xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.open('GET', Config.host + 'csrf/display_form', true); xhr.onload = function() { console.log( 'xhr response code:' + xhr.status + xhr.statusText); } xhr.onerror = function() { console.log( 'ERROR ' + this + xhr.status + xhr.statusText + xhr.responseText); } xhr.send(); Как видите, здесь кроме стандартного ajax-запроса есть команда Код:
xhr.withCredentials = true; Вот код бекенда(написан на python, но принципиального значения это не имеет): Код:
def display_form(request): В результате кука в браузере устанавливается и кроме того отрабатывает коллбек xhr.onload. То есть в консоль браузера выводится статус ОК. Проблема в том, что эта кука устанавливается даже в том случае когда я со стороны сервера нарушаю CORS, а точнее убираю объявление следующих заголовков(оба сразу или по одному): Код:
response['Access-Control-Allow-Origin'] = 'http://localhost:4200' Я ожидал, что после нарушения CORS со стороны бекенда кука не установится. Помогите пожалуйста разобраться. На гите: фронт, бек |
Заголовки ответа нужны только для того, чтобы в js получить содержимое ответа.
Сам по себе кроссдоменный запрос ведь не только через xhr можно сделать, а ещё массой способов. И куки всегда будут выставляться, потому что сервер ставит их для своих надобностей. А вот прежде чем отдать в скрипт содержимое ответа, браузер глянет наличие заголовков. |
Часовой пояс GMT +3, время: 09:13. |