Ионное приложение не может подключить сервер с поддержкой cors с помощью $http

Я пытаюсь создать мобильное приложение с ионным каркасом. Когда мое приложение пытается подключиться к серверу, чтобы получить json (сервер - это веб-api и cors), он просто возвращает 404 на genymotion и real device. Но когда я запускаю приложение в браузере с ionic serve, все работает нормально.

Я уверен, что CORS функционирует. Здесь заголовок ответа я получил, пока приложение работает в браузере.

ответ

Access-Control-Allow-Origin:*
Cache-Control:no-cache
Content-Length:395
Content-Type:application/json; charset=utf-8
Date:Fri, 08 May 2015 20:24:04 GMT
Expires:-1
Pragma:no-cache
Server:Microsoft-IIS/7.0
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET

Запрос:

Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, lzma, sdch
Accept-Language:tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:no-cache
Connection:keep-alive
DNT:1
Host:*******:14400
Origin:http://192.168.0.28:8100
Pragma:no-cache
Referer:http://192.168.0.28:8100/

Config.xml имеет <access origin="*"/> эту строку в конфигурации

в моем app.js Я удалил X-Requested-с заголовками для всех http-вызовов.

.config(['$httpProvider', function($httpProvider) {

        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers.common['X-Requested-With'];  
    }
])

Я просто использую запросы на сервер в классах factory.

$http.get(serverPath + "/api/mobilerest/mainPage");

Когда я запускаю приложение в Genymode или реальном устройстве, ответ равен 404, а statusText "не найден". Я уверен, что работает web api, причина такого поведения в приложениях на основе ионных приложений, мое приложение - это локальный файл, а протокол - файл:///, поэтому заголовок Origin имеет нулевой запрос, тогда сервер возвращает 404. Я также попробовал локальный файл без какого-либо сервера, я получаю ту же ошибку, что и в приложении.

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:tr-TR,tr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:no-cache
Connection:keep-alive
DNT:1
Host:server:14400
Origin:null
Pragma:no-cache

Я что-то пропустил?

Ответ 1

cordova-plugin-whitelist кажется "обязательным" в настоящее время.

установить его:

cordova plugin add cordova-plugin-whitelist

настроить config.xml

Вы можете сохранить свою текущую настройку с * или изменить для более ограничительных правил

добавить политику html на index.html, вы также должны добавить политику. Чтобы разрешить все, вот оно:

 <meta http-equiv="Content-Security-Policy" content="default-src *;
 style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'
 'unsafe-eval'"

Ответ 2

вы можете просто войти в файл config.xml и отредактировать эту строку

<access origin="*://*/*" />

и вы можете вызывать любые данные с отключением CORS в консоли спасибо PLZ применить этот код вашего ионного приложения