Запрос GET успешно выполняется с ответом в Safari, но тот же запрос не выполняется из-за CORS в Chrome и Firefox - PullRequest
0 голосов
/ 23 октября 2019

Я отправляю запрос GET из внешнего приложения в браузере на внутренний сервер. Внешний интерфейс находится в другом поддомене (назовем его: frontend.abcapp.com ), тогда как внутренний сервер находится в другом поддомене (назовем его: backend.abcapp.com).

Запрос работает нормально и возвращает ожидаемый ответ в браузере Safari (Версия 12.1.2 (12607.3.10)) .

Тем не менее, тот же запрос не выполняется из-за CORS на обоих Chrome (версия 77.0.3865.120 (официальная сборка) (64-разрядная версия)) и Firefox (68.0.1 (64-разрядная версия)) .

Это сообщение об ошибке в Chrome и Firefox

Access to XMLHttpRequest at 'https://backend.abcapp.com/user' from origin 'https://frontend.abcapp.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Это странно, потому что внутренний сервер определенно устанавливает заголовок CORS для каждого ответа.

Вот заголовки request для запроса OPTIONS от CHROME:

Запрос URL: https://backend.abcapp.com/user;Метод запроса: OPTIONS

Access-Control-Request-Headers: content-type,x-client-id,x-request-id,x-requested-by
Access-Control-Request-Method: GET
Origin: https://frontend.abcapp.com
Referer: https://frontend.abcapp.com/
Sec-Fetch-Mode: cors
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36

Вот соответствующие заголовки response в Chrome (обратите внимание на наличие заголовков CORS):

access-control-allow-credentials: true
access-control-allow-headers: content-type,x-client-id,x-request-id,x-requested-by
access-control-allow-methods: GET, POST, PUT, DELETE, HEAD, OPTIONS
access-control-allow-origin: https://frontend.abcapp.com
allow: HEAD,GET,OPTIONS
content-length: 18
content-type: text/plain
date: Wed, 23 Oct 2019 14:58:15 GMT
status: 200

Предварительный вызов OPTIONSпроходит со статусом 200, но тогда фактический запрос GET никогда не выполняется, и вышеупомянутое сообщение об ошибке CORS появляется на консоли в случае браузеров CHROME и FIREFOX.

Однако, то же самое запрос завершается успешно и возвращает требуемый ответ в SAFARI

Вот заголовки request для запроса GET от SAFARI:

Content-Type: application/json
Accept: application/json, text/plain, */*
Host: backend.abcapp.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Origin: https://frontend.abcapp.com
Referer: https://frontend.abcapp.com/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Safari/605.1.15
Connection: keep-alive
Cookie: JSESSIONID=123123123312; _sessionId=12312-123123
x-requested-by: true
x-request-id: 112-1212
x-client-id: 112-1212

Вот соответствующие ответ заголовки для SAFARI:

Access-Control-Allow-Credentials: true
Content-Type: application/json
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, HEAD, OPTIONS
Vary: Accept-Encoding
Date: Wed, 23 Oct 2019 13:24:26 GMT
X-Frame-Options: Deny
Content-Encoding: gzip
Access-Control-Allow-Origin: https://frontend.abcapp.com

Почему эта проблема CORS возникает только в Chrome и Firefox, но не в SAFARI?

...