Заголовок набора файлов cookie не отображается в Google Chrome - PullRequest
4 голосов
/ 18 апреля 2019

Проблема

Я использую сервер Spring Boot с конечной точкой Post, которая устанавливает cookie.При отправке запроса конечной точке из моего углового приложения я не вижу заголовок Set-Cookie в заголовках ответа в консоли разработчика Chrome.Почему заголовок Set-Cookie не отображается?

Сводка расследования

Заголовок ответа Set-Cookie отображается в заголовках ответа при использовании curl, Set-Cookie также присутствует в Safariи он отображается в журналах chrome net-export.

Environment

  • Я добавил запись для xxx.com, указывающую на мой localhost в моем файле / etc / hosts намой mac.
  • Я использую угловой интерфейс с командой ng serve --host 0.0.0.0 --disable-host-check на http://example.com:4200.
  • Я запускаю сервер весенней загрузки на http://example.com:8080
  • .интересующая конечная точка находится на http://example.com:8080/accounts/v1/user/authenticate
  • Использование последней версии Chrome Version 73.0.3683.103 (Official Build) (64-bit)

Попытка отладки

Safari

Набор-Cookie заголовок отображается в заголовках ответов в консоли разработчика Safari.

Chrome

Chrome Dev Console

Отправлено в devconsole -> сеть-> аутентифицировать запрос.Я просмотрел заголовки запроса и ответа, и Set-Cookie там не было.

Заголовки запроса

Accept: application/json, text/plain, */*
Content-Type: application/json
Origin: http://example.com:4200
Referer: http://example.com:4200/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36

Заголовки ответа

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://example.com:4200
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Connection: keep-alive
Content-Type: application/json;charset=UTF-8
Date: Wed, 17 Apr 2019 21:58:52 GMT
Expires: 0
Pragma: no-cache
Server: nginx/1.15.6
Transfer-Encoding: chunked
Vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

Использование Chrome Chrome:// net-export /

Я сохранил логи для пост-запроса.Интересно, что заголовок Set-Cookie действительно появляется в этих журналах.Кроме того, заголовок Cookie также отображается в запросе (возможно, он был сохранен с предыдущей попытки).

t=190196 [st=  0] +REQUEST_ALIVE  [dt=125]
                   --> priority = "MEDIUM"
                   --> url = "http://example.com/accounts/v1/user/authenticate"
t=190196 [st=  0]    NETWORK_DELEGATE_BEFORE_URL_REQUEST  [dt=0]
t=190196 [st=  0]   +URL_REQUEST_START_JOB  [dt=124]
                     --> load_flags = 0 (NORMAL)
                     --> method = "POST"
                     --> privacy_mode = 0
                     --> upload_id = "0"
                     --> url = "http://example.com/accounts/v1/user/authenticate"
t=190197 [st=  1]      NETWORK_DELEGATE_BEFORE_START_TRANSACTION  [dt=0]
t=190197 [st=  1]      HTTP_CACHE_GET_BACKEND  [dt=0]
t=190197 [st=  1]     +HTTP_STREAM_REQUEST  [dt=0]
t=190197 [st=  1]        HTTP_STREAM_JOB_CONTROLLER_BOUND
                         --> source_dependency = 16598 (HTTP_STREAM_JOB_CONTROLLER)
t=190197 [st=  1]        HTTP_STREAM_REQUEST_BOUND_TO_JOB
                         --> source_dependency = 16599 (HTTP_STREAM_JOB)
t=190197 [st=  1]     -HTTP_STREAM_REQUEST
t=190197 [st=  1]      UPLOAD_DATA_STREAM_INIT  [dt=0]
                       --> is_chunked = false
                       --> net_error = 0 (?)
                       --> total_size = 43
t=190197 [st=  1]     +HTTP_TRANSACTION_SEND_REQUEST  [dt=0]
t=190197 [st=  1]        HTTP_TRANSACTION_SEND_REQUEST_HEADERS
                         --> POST /accounts/v1/user/authenticate HTTP/1.1
                             Host: example.com
                             Connection: keep-alive
                             Content-Length: 43
                             Accept: application/json, text/plain, */*
                             Origin: http://example.com:4200
                             User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
                             Content-Type: application/json
                             Referer: http://example.com:4200/
                             Accept-Encoding: gzip, deflate
                             Accept-Language: en-US,en;q=0.9
                             Cookie: Authorization="xxxx"
t=190197 [st=  1]        HTTP_TRANSACTION_SEND_REQUEST_BODY
                         --> did_merge = false
                         --> is_chunked = false
                         --> length = 43
t=190197 [st=  1]        UPLOAD_DATA_STREAM_READ  [dt=0]
                         --> current_position = 0
t=190197 [st=  1]        UPLOAD_DATA_STREAM_READ  [dt=0]
                         --> current_position = 43
t=190197 [st=  1]     -HTTP_TRANSACTION_SEND_REQUEST
t=190197 [st=  1]     +HTTP_TRANSACTION_READ_HEADERS  [dt=122]
t=190197 [st=  1]        HTTP_STREAM_PARSER_READ_HEADERS  [dt=122]
t=190319 [st=123]        HTTP_TRANSACTION_READ_RESPONSE_HEADERS
                         --> HTTP/1.1 200 OK
                             Server: nginx/1.15.6
                             Date: Wed, 17 Apr 2019 21:27:35 GMT
                             Content-Type: application/json;charset=UTF-8
                             Transfer-Encoding: chunked
                             Connection: keep-alive
                             Expires: 0
                             Cache-Control: no-cache, no-store, max-age=0, must-revalidate
                             Set-Cookie: Authorization="xxxx"; Version=1; Domain=.example.com; Max-Age=1031; Expires=Wed, 17-Apr-2019 21:44:46 GMT
                             X-XSS-Protection: 1; mode=block
                             Pragma: no-cache
                             X-Frame-Options: DENY
                             Access-Control-Allow-Origin: http://example.com:4200
                             Vary: Origin
                             Vary: Access-Control-Request-Method
                             Vary: Access-Control-Request-Headers
                             Access-Control-Allow-Credentials: true
                             X-Content-Type-Options: nosniff
t=190319 [st=123]     -HTTP_TRANSACTION_READ_HEADERS
t=190319 [st=123]      NETWORK_DELEGATE_HEADERS_RECEIVED  [dt=0]
t=190320 [st=124]   -URL_REQUEST_START_JOB
t=190320 [st=124]    URL_REQUEST_DELEGATE_RESPONSE_STARTED  [dt=0]
t=190320 [st=124]    HTTP_TRANSACTION_READ_BODY  [dt=1]
t=190321 [st=125]    URL_REQUEST_JOB_FILTERED_BYTES_READ
                     --> byte_count = 698
                     --> bytes = "xxxx"
t=190321 [st=125]    HTTP_TRANSACTION_READ_BODY  [dt=0]
t=190321 [st=125] -REQUEST_ALIVE

Использование параметров Chrome

В некоторых сообщениях предлагалось отключитьэтот вариант хрома chrome://flags/#site-isolation-trial-opt-out.Но это никак не отразилось.

Angular

Добавлена ​​опция withCredentials: true в моем почтовом запросе в angular.Но это не решило проблему.

Curl

Я попытался смоделировать запрос от пользовательского интерфейса, используя curl

curl -i -H 'Origin: http://example.com:4200' -H 'Accept: application/json, text/plain, */*' -H 'Content-Type: application/json' -H 'Referer: http://example.com:4200/' --request POST --data '{"primaryEmailAddress":"testest@gmail.com"}' http://example.com:8080/accounts/v1/user/authenticate

Заголовки ответа на запрос содержали наборзаголовок печенья

HTTP/1.1 200 OK
Expires: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Set-Cookie: Authorization="Bearer xxxx"; Version=1; Domain=.example.com; Max-Age=545; Expires=Wed, 17-Apr-2019 22:00:46 GMT
X-XSS-Protection: 1; mode=block
Pragma: no-cache
X-Frame-Options: DENY
Date: Wed, 17 Apr 2019 21:51:41 GMT
Connection: keep-alive
Access-Control-Allow-Origin: http://example.com.com:4200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Credentials: true
X-Content-Type-Options: nosniff
Transfer-Encoding: chunked
Content-Type: application/json;charset=UTF-8

1 Ответ

0 голосов
/ 11 июля 2019

Я заметил такое же поведение (при использовании Chrome 75). Я не знаю, почему инструменты разработчика Chrome не отображают заголовок ответа Set-Cookie на вкладке Сеть. (Похоже, что так и должно быть.) Однако вы можете убедиться, что cookie-файл был установлен, если загляните на вкладку «Приложение» (см. «Приложение» - «Хранилище» -> «Файлы cookie»). Там вы также можете редактировать и удалять куки.

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