Проблемы CORS при эмуляции ионного приложения на iOS

Недавно я обновил ionic-cli и теперь пытаюсь эмулировать ионное приложение с помощью команды ionic cordova emulate ios.

Однако я получаю ошибки CORS с каждым запросом API.

Происхождение http://localhost:8080 не разрешено Access-Control-Allow-Origin.

Я обнаружил, что ionic docs говорят об этой команде

Подобно запуску Cordova, эмулируйте напрямую, но также следите за изменениями в веб-ресурсах и обеспечивает функциональность перезагрузки в реальном времени с параметром --livereload.

Похоже, что эта команда также запускает сервер, что объясняет, почему источником является localhost, а не file://.

Однако я пытался эмулировать с помощью cordova emulate ios или создавать приложение с помощью ionic cordova build ios и запускать вывод с помощью симулятора, но все равно получаю ошибки CORS.

Эмуляция на Android работает нормально, и есть прокси для запуска приложения в браузере.

Есть идеи, на правильном ли я пути и есть ли способ подражать file://? Будет ли эта проблема сохраняться при выпуске приложения в App Store?


person emroussel    schedule 10.09.2017    source источник


Ответы (2)


Проблема с CORS на iOS на самом деле возникла не из-за ionic-cli, а из-за того, что я перешел на использование WKWebView из UIWebview.

В этом сообщении блога подробно рассказывается о WKWebView. и почему он намного лучше своего предшественника.

Это также упоминает об этом в отношении CORS:

UIWebview или более раннее веб-представление в iOS никогда фактически не применяло CORS, но WKWebView делает и не предоставляет способа его отключения. Чтобы решить эту проблему, вам необходимо правильно реализовать CORS и добавить следующую запись:

Происхождение: http://localhost:8080

ЕСЛИ это невозможно (у вас нет API), можно использовать собственный HTTP-плагин @ionic-native/http.

Итак, я включил CORS в своем API, и все заработало, как и раньше.

person emroussel    schedule 16.10.2017
comment
Он применяет cors, даже если --consolelogs и --livereload не активированы? Раньше, если --consolelogs и --livereload не были активированы, запрос работал правильно - person Hanzo; 13.12.2017
comment
Нет, на самом деле я ошибся в причине проблемы. Я также недавно переключился с UIWebview на WKWebView, и WKWebView применяет CORS, тогда как его предшественник этого не делал. - person emroussel; 14.12.2017

попробуйте создать ионный прокси, добавив этот код в ionic.config.json

"proxies": [{
    "path": "/api",
    "proxyUrl": "http://your-server.com"
}]

а затем вызовите свой сервер просто с помощью http.get('/api')

Если он все еще не работает, попробуйте использовать плагин Cordova http вместо углового http.

person Marouan    schedule 10.09.2017
comment
Спасибо за ваш ответ, но у меня уже настроен прокси при запуске приложения в браузере. До обновления ionic cli приложение при эмуляции на iOS имело источник file://, но теперь источник localhost. Мне также интересно, будет ли та же проблема с приложением в App Store, поскольку сборка для производства и выпуска также создает проблемы CORS. - person emroussel; 11.09.2017
comment
Я не думаю, что продукт решит проблему, но попробуйте использовать https://ionicframework.com/docs/native/http/ вместо http-клиента angularjs. - person Marouan; 11.09.2017
comment
На самом деле мне нужно использовать authHttp для аутентификации с помощью моего API, но я не уверен, что http-клиент решит проблему, так как он будет отправлять одни и те же заголовки с запросами (и тот же источник). - person emroussel; 12.09.2017