$ http请求状态0与https

情况:

我正在从一个API接收数据的Ionic应用程序。

之前,API是在http://地址,一切工作正常。

然后,我们已经将API移至https://并且不再工作。 或者,它仍然在浏览器中访问它,但不是在电话(或模拟器)中。

我不确定可能是什么问题。 在控制台日志中,我看到请求的状态是0。

它可能与白名单,标题或CORS有关。 我尝试了几种方法,但都没有工作。

白名单:

之前在config.xml中有这个白名单:

<allow-navigation href="http://*/*" /> 

我试图用几种方法修改它,但是这并没有解决问题。 比如我试过了:

 <allow-navigation href="https://*/*" /> 

 <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 ); } 

问题:

如何让HTTPS上的API也能正常工作?

如果这是一个CORS相关的问题,我怎么能在服务器端启用它?

Solutions Collecting From Web of "$ http请求状态0与https"

当你从Http切换到Https时,大部分的问题是Hand Shake或证书合规。 请检查您的SSL证书是否在您的信任商店中可用,并检查您的Android设备是否支持证书提供商。 例如,初始Android平台不支持CA证书。

以下两个链接可以给你一些想法。

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

我想从一个设备CORS是不是一个问题。 看这个例子。 从浏览器进行testing产生一个CORS问题。 我认为这个问题是你的白名单。 在你的config.xml中添加(source: this ):

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

这只是一个猜测!

尝试使用: ionic plugin add cordova-plugin-whitelist

https://forum.ionicframework.com/t/update-to-cordova-5-0-0-make-http-call-error/22703

与cordova5.0.0他们重新介绍了白名单插件..你需要添加这个插件,并允许你的后端网站。

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

如果您的应用程序正在通过HTTPS提供服务,则您正在进行的任何呼叫都是通过HTTPS连接到相同的主机/端口等。

如果您使用完整的URI进行请求,例如$http.get('http://foobar.com/somePath')那么您将必须更改您的URI以使用https

如果您在设备中运行您的APK文件的Android上看到此错误,则错误与CORS无关。 在开发原生或混合/本地移动应用程序时,除非它们是渐进式networking应用程序,否则CORS不是问题。 开发面向设备的移动应用程序时,在开发和进行初始debugging时,请使用chrome并禁用CORS。 您只需要运行[install-folder] \ chrome.exe –disable-web-security –user-data-dir

我也遇到过这样的问题。 步骤是帮助你解决问题

  1. 创build新的离子应用程序
  2. 午餐你的手机或模拟器
  3. 修改你的WWW目录
  4. 再次编译你的应用程序和午餐你的手机或模拟器

问题是,检查是否添加正确的离子应用程序。

我的应用程序问题通过添加插件来解决

我想,这些步骤将帮助你。