Обход CORS + Cordova

В коде обращаюсь к стороннему API. Естественно браузер делает предзапросы OPTIONS. Начал разбираться как это обойти. На сколько я понимаю, для отображения HTML в приложении используется wkwebview. Ну по сути браузер, с такой же политикой безопасности. При этом есть whitelist plugin в котором можно указать

<access origin="*" subdomains="true" />

или вообще

<preference name="websecurity" value="disable" />

Получается что в самом приложении CORS ошибки не должны возникать? А это только в браузере на этапе разработки?

Вычитал что можно обойти через прокси (через-чур способ) или использовать плагин для отдельного выполнения хттп запросов.

здесь рекомендация поставить cordova-plugin-ionic-webview только непонятно, это замена wkwebview?

Итого: как обойти проверку CORS?

Вообще никак не должно влиять на CORS политику

Если на сервере нет CORS заголовков которые это разрешают, то как вариант только через прокси

Обойти необходимость OPTIONS? Или обойти необходимость заголовков на сервере?

есть JSONP, но это уже извращение в 2020 году конечно

Нужно избавиться вообще от проверки 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 соответственно разрешения. (

Про флажок вычитал. Себе его ставить при открытии дев версии в браузере - не проблема.

я не пойму, в самом приложении на устройстве можно ли отключить политику корс как и на десктопе?

Нужно использовать “нативные запросы”, для этого есть плагин под Cordova

Android c 9 версии, а iOS и 13 работает без https

Ну вот щас буду пробовать этот:

  1. Нужно что бы в 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:”

Это позволит загрузить всё. Практически.

  1. Запросы на JSON не блокируются. Если ваш сервер api возвращает JSON - они из любого места загружаются. Для всех остальных запросов нужно выставить заголовки ответа сервера, разрешающие кросдоменные запросы.

Так в том то и дело, что сервер не мой. В другом своем топе выяснил про заголовок User-Agent. Тоже под политику безопасности попадает. Значит все сведет к использованию Стороннего клиента для запросов. В обход все этого.

Да, так и есть. Просто 8 андроида у меня нет.
А вебсокеты у меня и на 7 работали только через HTTPS никак иначе. (Если конечно не разрешить в конфиге application android:usesCleartextTraffic=“true” )

application/json требует префлайта. Можно поставить text/plain к примеру и вот он не требует, если это get,post,head

хм, неужели так легко обойти? просто зачем тогда всю эту политику городили если это решается просто своим разбором ответа.

https://learn.javascript.ru/fetch-crossorigin

Кросдоменные требуют заголовка в любом случае. А вот префлайт - не всегда. Есть еще jsonp, это другое, но он может работать и без заголовков и без префлайта.
Если нет доступа к серверу, то только плагины кордовы

а как тестить в браузере?

запрос непростой, так как json посылаем и принимает. сервер не мой, соответственно 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:”


Это пихаю в confog.xml

config-file platform=“android” parent="/manifest" mode=“merge”>
application android:usesCleartextTraffic=“true” />
/config-file>

access uri="*" subdomains="true" />
access origin="*" />
access uri="*" subdomains="true" />
access origin="*" />
allow-intent href="http://*/*" />
allow-intent href="ws://*/*" />
allow-intent href="wss://*/*" />
allow-intent href="https://*/*" />
allow-navigation href="*" />

Это пихаю в php
echo json_encode($server_response);


Ну или на node.js
response.json (neworder_operations);

И у меня вот так работает. Если получаю данные через app.request.promise.json

Если через app.request.promise.post, то там ещё отдаю заголовки сервером. Allow-cros…*