Отладка запросов CORS, которые не могут установить файлы cookie даже с заголовками CORS и withCredentials = true - PullRequest
0 голосов
/ 05 декабря 2018

Есть много вопросов о StackOverflow пользователей, делающих запрос CORS, который неправильно устанавливает куки.У меня та же проблема, но мне интересно, есть ли в Chrome или другом браузере метод диагностики и понимания того, почему не установлены файлы cookie.

Я нахожу все, что может вызвать это: отсутствие заголовков CORS, отсутствие withCredentails=true, ситуации через безопасные границы https, определенные флаги на файлах cookie ... Я хочу понять, что делает Chromeвместо того, чтобы просто гадать, почему это не работает.


Вот моя конкретная проблема, но на самом деле я хочу понять, а не просто исправить проблему.

Запрос на создание домена:

Примечание withCredentails = true.

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState === XMLHttpRequest.DONE) {
    callback(xmlhttp);
  }
};
xmlhttp.open('POST', url, true);
xmlhttp.withCredentials = true;
xmlhttp.setRequestHeader('Content-Type', 'application/json');
xmlhttp.send(payload);

Запрос:

Обратите внимание, что Chrome не показывает заголовки Set-Cookie для запроса.enter image description here

Завиток того же запроса:

Но если я щелкну правой кнопкой мыши> copy> cUrl и выполню, вот необработанные заголовки, включая Set-Cookie:

curl 'http://satellite:6988/medic/login' -H 'Referer: http://upstream:5988/medic/login?redirect=http%3A%2F%2Fupstream%3A5988%2Fmedic%2F_design%2Fmedic%2F_rewrite%2F%23%2Fmessages%2Fcontact%3A13863168-be61-418a-aea1-1b19b9a5af39' -H 'Origin: http://upstream:5988' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36' -H 'Content-Type: text/plain;charset=UTF-8' --data-binary '{"user":"worker","password":"dSNH1sv2jzdB"}' --compressed -v
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to satellite (127.0.0.1) port 6988 (#0)
> POST /medic/login HTTP/1.1
> Host: satellite:6988
> Accept: */*
> Accept-Encoding: deflate, gzip
> Referer: http://upstream:5988/medic/login?redirect=http%3A%2F%2Fupstream%3A5988%2Fmedic%2F_design%2Fmedic%2F_rewrite%2F%23%2Fmessages%2Fcontact%3A13863168-be61-418a-aea1-1b19b9a5af39
> Origin: http://upstream:5988
> User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36
> Content-Type: text/plain;charset=UTF-8
> Content-Length: 43
> 
* upload completely sent off: 43 out of 43 bytes
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Access-Control-Allow-Origin: http://upstream:5988
< Vary: Origin, Accept-Encoding
< Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, HEAD, DELETE
< Access-Control-Allow-Headers: accept, authorization, content-type, origin, referer, x-csrf-token
< Access-Control-Allow-Credentials: true
< Set-Cookie: AuthSession=d29ya2VyOjVDMDdEMjgwOj06hJxoYrYGtUxNa3ImYd1AZ7Vw; Path=/
< Set-Cookie: userCtx=%7B%22name%22%3A%22worker%22%2C%22roles%22%3A%5B%22chv%22%5D%7D; Max-Age=31536000; Path=/; Expires=Thu, 05 Dec 2019 13:28:32 GMT
< Set-Cookie: satelliteServer=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT
< Content-Type: application/json; charset=utf-8
< Content-Length: 16
< ETag: W/"10-oV4hJxRVSENxc/wX8+mA4/Pe4tA"
< Date: Wed, 05 Dec 2018 13:28:32 GMT
< Connection: keep-alive
< 
* Connection #0 to host satellite left intact
{"success":true}

1 Ответ

0 голосов
/ 06 декабря 2018

Консоль Chrome полезна для понимания проблем с заголовками CORS.Поскольку при полной блокировке запроса он записывает понятные описательные заголовки.

Для моего конкретного сценария я использовал события chrome: // net-internals / #, которые содержат связанные с cookie события, чтобы понять, что заголовки Set-Cookie являютсяОпущено в инструментах разработчика, но обслуживалось, получалось и правильно устанавливалось.

Моя проблема заключалась в том, что я устанавливал options.credentials=true при использовании fetch для запросов после того, как файлы cookie были установлены вместо требуемого options.credentials='include'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...