【问题标题】:$http request status 0 with https$http 请求状态 0 和 https
【发布时间】:2016-05-11 10:18:15
【问题描述】:

情况:

我正在开发一个从 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 相关问题,如何在服务器端启用?

【问题讨论】:

  • 您的服务器是否支持 CORS?此外,在浏览器中,https url 的证书显示任何错误或警告?
  • 浏览器中没有错误。关于服务器中的 CORS 支持我不知道。
  • @johnnyfittizio 在浏览器中,您将能够无错误地获得响应,您可能会在与 AJS 一起使用它时获得此 CORS,因此请尝试启用 CORS用于服务器端的 https。您从哪个平台获取 API? ,如果它的 C# 我可以帮助你启用它
  • @johnnyfittizio 还有一点我想告诉你,每个响应,甚至是错误 500,都必须附加 CORS 标头。如果服务器没有将 CORS 标头附加到错误 500 响应,则 XHR 对象不会解析它,因此 XHR 对象内部不会有任何响应正文、状态或任何其他响应数据。
  • @johnnyfittizio 经过一番研究后,这里是link,如果 $https 返回状态 0 它与 Angular 端无关,它与浏览器端有关,对此的解决方案是 @987654322 @

标签: android ios angularjs https ionic-framework


【解决方案1】:

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

【讨论】:

  • 这也是我的问题!
【解决方案2】:

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

  1. 创建新的 Ionic 应用程序
  2. 午餐你的手机或模拟器
  3. 修改你的 WWW 目录
  4. 再次编译您的应用程序并在您的手机或模拟器中享用午餐

问题是,检查您的离子应用程序是否正确添加了插件

添加插件

解决了我的应用问题

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

【讨论】:

  • 感谢@amila 的回复。但我不太明白您提出的从 HTTPS 正确获取 APİ 的解决方案是什么。
【解决方案3】:

我认为来自设备的 CORS 不是问题。参见例如this。从您的浏览器测试它产生 CORS 问题。 我认为问题是你的白名单。 在你的 config.xml 添加(来源:this):

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

只是猜测!

【讨论】:

    【解决方案4】:

    尝试: 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 中,他们重新引入了白名单插件。 您需要添加此插件并允许您的后端网址。

    【讨论】:

      【解决方案5】:
      $http.get('/someUrl').success(successCallback);
      

      如果您的应用程序通过 HTTPS 提供服务,那么您进行的任何调用都是针对同一主机/端口等的,因此也通过 HTTPS。

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2017-09-25
          • 2017-05-14
          • 1970-01-01
          • 2021-01-15
          • 2021-10-20
          • 2016-12-24
          • 2012-03-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多