Как исправить ошибку предварительной проверки iOS 12 Safari Cors?

Я пытаюсь немного лучше понять COR, так как несколько пользователей нашего веб-приложения жалуются, что после обновления до iOS 12 они получают ошибки предварительной проверки.

Ошибки веб-инспектора

[Error] Preflight response is not successful
[Error] Fetch API cannot load https://www.api.com due to access control checks.
[Error] Failed to load resource: Preflight response is not successful (v4, line 0)

Клиентское приложение представляет собой приложение React с Apollo. Он вызывает сервер по HTTPS с помощью Apache HTTPD и Express JS.

Все отлично работает во всех других браузерах, это изолировано от iOS 12.

Что странно, когда я просматриваю журналы доступа HTTPD, я не вижу никаких предварительных вызовов. Когда я пытаюсь попасть на сервер напрямую (в iOS 12), я вижу в журналах как предварительный запрос OPTIONS, так и POST. Но при вызове сервера через веб-приложение предварительная проверка COR не выполняется.

В экспресс-приложении я также отключил все запросы, и там его тоже нет.

В HTTPD у меня есть настройки

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS

В экспрессе у меня тоже самое.

Любые идеи?!


person dmo    schedule 20.09.2018    source источник
comment
О какой именно ошибке сообщает браузер в консоли devtools при возникновении сбоев?   -  person sideshowbarker    schedule 21.09.2018
comment
@sideshowbarker Я добавил это в вопрос. ваше здоровье   -  person dmo    schedule 21.09.2018
comment
Итак, следующее, что вы, вероятно, захотите сделать, это проверить запрос и ответ с помощью веб-инспектора. Откройте вкладку «Сеть» и перезагрузите, нажмите на запрос https://www.api.com OPTIONS. Проверьте, каковы точные значения заголовков запроса Access-Control-Request-Method и Access-Control-Request-Headers, а затем проверьте ответ, чтобы увидеть код ответа HTTP и точные значения Access- Заголовки ответа Control-Allow-Methods и Access-Control-Allow-Headers и их сравнение с заголовками запроса.   -  person sideshowbarker    schedule 21.09.2018
comment
В коде внешнего интерфейса для запроса вы устанавливаете заголовки Accept, Accept-Language или Content-Language?   -  person sideshowbarker    schedule 21.09.2018
comment
хм, вы знаете, что странно, для запроса не назначен метод.   -  person dmo    schedule 21.09.2018
comment
это снимок экрана запроса из iOS 12 с использованием удаленного инспектора imgur.com/a/ZoVrFh2   -  person dmo    schedule 21.09.2018
comment
по сравнению с этим на рабочем столе imgur.com/a/tGx7gX7   -  person dmo    schedule 21.09.2018
comment
похоже, это скорее ошибка iOS — я создал для них ошибку отчет об ошибке. apple.com/web/?problemID=44621834   -  person dmo    schedule 21.09.2018
comment
хм, я думаю, ошибка не общедоступна — когда я пытаюсь перейти по этой ссылке, я получаю «Извините, что-то пошло не так. Этой ошибки не существует, или у вас нет доступа». В любом случае, если вы получите ответ на сообщение об ошибке, обновите вопрос здесь.   -  person sideshowbarker    schedule 22.09.2018
comment
@dmo не могли бы вы добавить свой отчет об ошибке Apple на openradar.me/44621834?   -  person Tim Lewis    schedule 01.11.2018
comment
12.1 исправил проблему   -  person dmo    schedule 05.11.2018


Ответы (4)


Я боролся с этой же проблемой в течение последних двух дней и только сейчас нашел решение/ответ.

Это ошибка в iOSv12, но она уже исправлена ​​в бета-версии iOSv12.1 (16B5059d), при условии, что код текущей бета-версии будет запущен в производство.

Проблема в том, что предварительные вызовы OPTIONS iOSv12 WebKit не покидают устройство. Я запустил WireShark и симулятор iOSv12, чтобы убедиться в этом.

Долгое время скрывался, я создал учетную запись только для того, чтобы опубликовать этот ответ. Если я нарушил правила/этикет этим ответом, извините.

person S. Met    schedule 21.09.2018
comment
Нет, это потрясающе! спасибо, что присоединились и поделились. Меня утешает, что кто-то еще столкнулся с проблемой, так как Google не очень помог. Я удивлен, что на большее количество людей это не повлияло? - person dmo; 21.09.2018
comment
Сообщество Ionic впервые обнаружило это в бета-версии iOS v12, но, согласно этому сообщению, бета-версия v12 2 устранила проблему: stackoverflow.com/questions/50707146/ Я не знаю, что произошло между бета-версией 2 и v12, и я удивлен, что другой вопрос stackoverflow не был повторно открыт. - person S. Met; 21.09.2018
comment
Если это то же самое, то это огромный регресс. Все еще удивлен, что больше людей разглагольствует, сталкиваясь с этим. - person dmo; 21.09.2018
comment
Спасибо, что разместили информацию здесь. Похоже, исправлена ​​ошибка WebKit для этого bugs.webkit.org/show_bug.cgi?id =188355. И набор изменений для исправления: trac.webkit.org/changeset/234626/webkit. - person sideshowbarker; 22.09.2018
comment
Я не открывал повторно stackoverflow. com/questions/50707146/, потому что я не сталкивался с проблемой в финальной версии iOS12. Я установил XCode 10 и попробовал свое приложение на симулированном устройстве, как я делал это в июне, и не столкнулся с проблемой. - person David Dal Busco; 23.09.2018
comment
В качестве продолжения была выпущена iOS 12.1, и я могу подтвердить, что CORS работает должным образом. @dmo твоя проблема тоже решена? - person S. Met; 31.10.2018
comment
Я только что обновился до iOS 12.1 и могу подтвердить, что у меня все еще есть эта проблема — я не вижу предварительный сетевой запрос OPTIONS в веб-инспекторе Safari. - person Tim Lewis; 01.11.2018
comment
Я все еще страдаю от той же проблемы. - person dmo; 01.11.2018
comment
Подтверждено, что мне удалось решить мою проблему и что она работает в iOS версии 12.1. Копнув глубже, я обнаружил, что он также не работает на рабочем столе Safari, и что моя основная проблема заключалась в том, что было изменение местоположения 302, которое рабочий стол Firefox и рабочий стол Chrome будут использовать для запроса CORS OPTIONS. Прямой вызов конечного местоположения вместо того, чтобы позволить ему следовать по номеру 302, решил проблему для меня. - person Tim Lewis; 01.11.2018
comment
Я столкнулся с той же проблемой. При обновлении iOS до последней версии проблема решилась сама собой. - person yokks; 16.01.2019

Если в «Access-Control-Allow-Headers» указано, что заголовок не разрешен, вы можете исправить это, добавив определенный заголовок со стороны сервера, куда вы отправляете «Access-Control-Allow-Headers». потому что подстановочный знак не работает, т.е. «Access-Control-Allow-Headers»: «*»

Это должно быть «Access-Control-Allow-Headers»: «*, Accept, Content-Type, Content-Length, Accept-Encoding, CUSTOM-ALLOWED-HEADER»

person VeeRAdroit    schedule 21.01.2020

Для всех, кто сталкивается с этой проблемой, проблема заключается в том, что iOS12 не любит <add name="Access-Control-Allow-Headers" value="*" />, когда у вас есть какие-либо пользовательские заголовки. Это было исправлено в БЕТА-версии, которая так и не вошла в официальный релиз.

Решение состоит в том, чтобы указать каждый пользовательский заголовок отдельно, например: <add name="Access-Control-Allow-Headers" value="*,customheader1,customheader2" />

person Wesley Coetzee    schedule 04.02.2021

Если у вас возникла ошибка в ionic, удалите этот плагин «cordova-plugin-ionic-webview».

person AKSHAT JAIN    schedule 17.12.2018
comment
Пожалуйста, также поделитесь причиной, по которой OP необходимо удалить этот конкретный плагин. - person Andreas; 17.12.2018
comment
Это все равно, что сказать, что у твоей машины проблемы с двигателем? Просто снимай двигатель... - person opznhaarlems; 21.04.2020