В коде обращаюсь к стороннему API. Естественно браузер делает предзапросы OPTIONS. Начал разбираться как это обойти. На сколько я понимаю, для отображения HTML в приложении используется wkwebview. Ну по сути браузер, с такой же политикой безопасности. При этом есть whitelist plugin в котором можно указать
<access origin="*" subdomains="true" />
или вообще
<preference name="websecurity" value="disable" />
Получается что в самом приложении CORS ошибки не должны возникать? А это только в браузере на этапе разработки?
Вычитал что можно обойти через прокси (через-чур способ) или использовать плагин для отдельного выполнения хттп запросов.
здесь рекомендация поставить cordova-plugin-ionic-webview только непонятно, это замена wkwebview?
Нужно избавиться вообще от проверки CORS. То есть и префлай запрос не нужен и проверка на соответствие хоста. Ведь все это актуально для сайтов, где могут подсунуть XSS.
Не совсем понятно, используется ли при разработке в браузере отключениее CORS?
Для этого надо запустить хром с опцией --disable-web-security
“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” --disable-web-security --user-data-dir=“D:\chromews”
После 7+версииандроид запросы должныбытьHTTPS, если нет на сервереSSL,то надовконфиге прописать разрешения.(Это подходитдлясборки вCordova +Phonegap)
Конечно же, если это запросы JSON, через app.request.promise.json (или чо-то подобное), то сервер может и не возвращать заголовки, такие запросы не блокируются.
Для всех остальных надо что бы сервер возвращал заголовки разрешающие кросдомен.
Для загрузки всяких blob и прочего нужно выставить в index.html соответственно разрешения. (
Нужно что бы в index.html было прописаны разрешения. Примерно такие.
meta http-equiv=“Content-Security-Policy” content=“media-src * blob:; img-src * blob:; default-src * ‘self’ ‘unsafe-inline’ ‘unsafe-eval’ data: gap: content:”
Это позволит загрузить всё. Практически.
Запросы на JSON не блокируются. Если ваш сервер api возвращает JSON - они из любого места загружаются. Для всех остальных запросов нужно выставить заголовки ответа сервера, разрешающие кросдоменные запросы.
Так в том то и дело, что сервер не мой. В другом своем топе выяснил про заголовок User-Agent. Тоже под политику безопасности попадает. Значит все сведет к использованию Стороннего клиента для запросов. В обход все этого.
Да, так и есть. Просто 8 андроида у меня нет.
А вебсокеты у меня и на 7 работали только через HTTPS никак иначе. (Если конечно не разрешить в конфиге application android:usesCleartextTraffic=“true” )
Кросдоменные требуют заголовка в любом случае. А вот префлайт - не всегда. Есть еще jsonp, это другое, но он может работать и без заголовков и без префлайта.
Если нет доступа к серверу, то только плагины кордовы
Что такое префлайт? Я ламер. Я от проекта к проекту таская один и тот же конфиг, и гружу данные через Json.
Это пихаю в index.html. Да, я не знаю почему, но картинки блобом у меня не грузятся если этого не прописать тут.
meta http-equiv=“Content-Security-Policy” content=“media-src * blob:; img-src * blob:; default-src * ‘self’ ‘unsafe-inline’ ‘unsafe-eval’ data: gap: content:”