$ 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" />
Это просто предположение!
Ответ 3
Попробуйте:
ionic plugin add cordova-plugin-whitelist
https://forum.ionicframework.com/t/update-to-cordova-5-0-0-make-http-call-error/22703
с кордорой 5.0.0 они снова включили плагин whitelist.
Вам нужно добавить этот плагин и разрешить ваши внутренние ссылки.
Ответ 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-каталог
- Снова скомпилируйте приложение и обедайте свой телефон или эмулятор.
Проблема заключается в том, чтобы правильно добавить подключить к вашему ионному приложению.
Моя проблема с приложением была решена путем добавления подключаемого модуля
Я думаю, эти шаги помогут вам.