$ http request status 0 с https

СИТУАЦИЯ:

Я работаю над Ionic-приложением, которое получает данные от API.

До этого API был по адресу http://, и все работало нормально.

Затем мы переместили API в https://, и он больше не работает. Или хорошо, он все еще работает с ним в браузере, но не в телефоне (или эмуляторе).

Я не уверен, в чем проблема. В журнале консоли я вижу, что статус запроса равен 0.

Это может быть связано с белым списком с заголовками или с CORS. Я пробовал несколько подходов, но никто не работал.

БелОГО:

Прежде чем в config.xml появился этот белый список:

<allow-navigation href="#" onclick="location.href='http://*/*'; return false;" /> 

Я попытался изменить его несколькими способами, но это не устранило проблему. Например, я попытался:

<allow-navigation href="#" onclick="location.href='https://*/*'; return false;" /> 

и

<allow-navigation href="*" />

API ЗАПРОС:

Это один из примеров запроса API:

$http.get( 'https://MY_DOMAIN.com/mobile/list_mobile_project/' ,{},{"headers" : {"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8" }})
     .success(function(data, status, headers, config) 
     {
             // code
     }).
     error(function(data, status, headers, config) 
     {
         console.log('Error with the API list_mobile_project');
         console.log(data);
         console.log(status);
         console.log(headers);
         console.log(config);
     });

ОТВЕТ ИСПОЛЬЗОВАНИЯ API:

И это пример ответа API:

public function list_mobile_project()
{
    header('Access-Control-Allow-Origin: *');
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept"); 

    // code

    echo json_encode( $project_list );
}

ВОПРОС:

Как заставить API работать и на HTTPS?

Если это проблема с CORS, как включить ее на стороне сервера?

Ответы

Ответ 1

Когда вы переключаетесь с Http на Https, в основном проблема заключается в ручном встряске или соблюдении соответствия сертификатов. Проверьте, доступен ли ваш SSL-сертификат в вашем хранилище доверия и проверьте, поддерживает ли ваше устройство Android поставщик сертификатов. Например, сертификаты CA не поддерживались для начальных платформ Android.

Возможно, следующие две ссылки могут дать вам некоторую идею.

http://nelenkov.blogspot.in/2011/12/using-custom-certificate-trust-store-on.html

http://www.codeproject.com/Articles/826045/Android-security-Implementation-of-Self-signed-SSL

Ответ 2

Я думаю, что с устройства CORS это не проблема. см., например, . Тестирование из вашего браузера создаст проблему CORS. Проблема, я думаю, это ваш белый список. В вашем config.xml add (источник: this):

<access origin="https://yourapi.com" />

Это просто предположение!

Ответ 4

$http.get('/someUrl').success(successCallback);

Если ваше приложение обслуживается через HTTPS, то любые вызовы, которые вы делаете, относятся к одному и тому же хосту/порту и т.д., а также через HTTPS.

Если вы используете полные URI для своих запросов, например. $http.get('http://foobar.com/somePath'), тогда вам придется изменить URI для использования https

Ответ 5

Если вы видите эту ошибку в Android, на которой запущен ваш APK файл внутри устройства, ошибка не имеет ничего общего с CORS. Когда вы разрабатываете родные или гибридные/родные мобильные приложения, если они не являются прогрессивными веб-приложениями, CORS не является проблемой. При разработке мобильных приложений, ориентированных на устройство, когда вы разрабатываете и выполняете начальную отладку, используйте хром и отключите CORS. Вам просто нужно запустить [install-folder]\chrome.exe --disable-web-security --user-data-dir

Ответ 6

Я также столкнулся с такой проблемой. Шаг поможет вам решить проблему.

  • Создать новое приложение Ionic
  • Обед телефона или эмулятора
  • Измените свой WWW-каталог
  • Снова скомпилируйте приложение и обедайте свой телефон или эмулятор.

Проблема заключается в том, чтобы правильно добавить подключить к вашему ионному приложению.

Моя проблема с приложением была решена путем добавления подключаемого модуля

Я думаю, эти шаги помогут вам.