проблемы с Cross Origin Resource Sharing: и OSX Safari, и iOS Safari не работают после предполетного запроса

Недавно у меня возникла проблема с запросом CORS (Cross Origin Resource Sharing) в Safari, как OSX, так и iOS, в то время как тот же запрос отлично работает в Chrome и Firefox. Я следую документации W3C и обрабатываю предполетный запрос на стороне сервера, мой ответ такой:

HTTP/1.0 200 OK
Access-Control-Allow-Origin: http://192.168.1.96:4399
Access-Control-Allow-Methods: POST
Access-Control-Allow-Methods: GET
Access-Control-Allow-Methods: OPTIONS
Access-Control-Allow-Headers: Origin
Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Allow-Headers: Accept
Access-Control-Allow-Headers: Access-Control-Request-Method
Access-Control-Allow-Headers: Access-Control-Request-Headers
Access-Control-Allow-Headers: DNT
Access-Control-Allow-Headers: X-CustomHeader
Access-Control-Allow-Headers: Content-Type
Access-Control-Max-Age: 0
Date: Fri, 25 Nov 2016 08:45:25 GMT
Origin: http://192.168.1.96:4399
Access-Control-Expose-Headers: Origin
Content-Encoding: gzip
Transfer-Encoding: chunked

Такой ответ отлично работает в Chrome, Firefox и браузере Android: запрос POST отправляется сразу после запроса предварительной проверки. Но в Safari после того, как сервер ответил на запрос reflight, я получил такое сообщение об ошибке с консоли:

Failed to load resource: The network connection was lost.

Я проверяю предполетный ответ с сервера, но нахожу его таким же, как указано выше ... После стольких поисков и попыток я все еще не могу заставить его работать :-(
Кто-нибудь сталкивался с этой проблемой раньше ? Может кто-нибудь выяснить, какую ошибку я сделал?
Заранее большое спасибо!


person BenMiracle    schedule 25.11.2016    source источник
comment
Похоже, вы - ошибка в Safari, о которой вы можете сообщить на bugs.webkit.org.   -  person sideshowbarker    schedule 26.11.2016
comment
@sideshowbarker Большое спасибо. Но что интересно, и иногда я обнаруживаю, что это работает, когда я проверяю параметр «Отключить ограничения для разных источников» в меню разработки в OSX Safari! Я подозреваю, что эта проблема может иметь какое-то отношение к политикам безопасности браузера, и я буду продолжать попытки разобраться в ней.   -  person BenMiracle    schedule 28.11.2016
comment
Я думаю, что это естественно, когда вы отключите ограничения для Cross Origin, вы можете без проблем подключиться к целевому серверу, и это совсем не интересно, потому что браузер намеренно использует Ограничения для Cross Origin Resource Sharing для повышения нашей безопасности. Итак, да, проблема связана исключительно с браузером.   -  person haͣrͬukaͣreͤrͬu    schedule 22.04.2019


Ответы (1)


Все дело в том, что Safari добавляет origin в заголовок запроса OPTIONS Access-Control-Request-Headers.

Поэтому, чтобы исправить это, вы должны включить этот заголовок в Access-Control-Allow-Headers в ответе.

PS: см. Аналогичный вопрос Запрос CORS не работает в Safari

person brutto    schedule 08.12.2016
comment
OP обнаруживает, что предполетный запрос завершился неудачно на сетевом уровне. Вы имеете в виду неправильно настроенный ответ OPTIONS. Но он никогда не получает такого ответа. - person RavenHursT; 12.09.2017
comment
@RavenHursT нет, brutto упоминает неверно сформированный заголовок запроса, следовательно, это правильный ответ (я только что проверил, и это помогло мне) - person thomaux; 16.11.2017