使用https $ http请求状态0

时间:2016-02-02 14:40:02

标签: android ios angularjs https ionic-framework

情况:

我正在开发一个从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 );
}

问题:

如何让API在HTTPS上运行?

如果是与CORS相关的问题,如何在服务器端启用它?

6 个答案:

答案 0 :(得分:2)

当您从Http切换到Https时,问题主要是Hand Shke或证书合规性。请检查您的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

答案 1 :(得分:0)

我认为从设备CORS不是问题。例如,见this。从您的浏览器进行测试创建一个CORS问题。 我认为问题是你的白名单。 在config.xml中添加(来源:this):

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

这只是猜测!

答案 2 :(得分:0)

尝试: ionic plugin add cordova-plugin-whitelist

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

使用cordova 5.0.0,他们重新引入了白名单插件.. 你需要添加这个插件并允许你的后端网址。

答案 3 :(得分:0)

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

如果您的应用是通过HTTPS提供的,那么您正在进行的任何通话都是针对同一主机/端口等,也是通过HTTPS进行的。

如果您为请求使用完整的URI,例如$http.get('http://foobar.com/somePath')然后您必须更改您的URI才能使用https

答案 4 :(得分:0)

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

答案 5 :(得分:-2)

我也遇到过这种问题。步骤是帮助您解决问题

  1. 创建新的离子应用程序
  2. 午餐您的手机或模拟器
  3. 修改您的WWW目录
  4. 再次编译您的应用并为您的手机或模拟器提供午餐
  5. 问题是,检查是否正确添加了插入您的离子应用程序。

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

    得以解决

    我认为,这些步骤对您有帮助。