$http 请求状态 0 和 https

Posted

技术标签:

【中文标题】$http 请求状态 0 和 https【英文标题】:$http request status 0 with 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 @ 【参考方案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】:

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

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

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

添加插件

解决了我的应用问题

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

【讨论】:

感谢@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

【讨论】:

以上是关于$http 请求状态 0 和 https的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络

计算机网络

http和https响应的状态码都有哪些

Angular Http 请求状态码 0 和 -1 是啥?

http1.0,HTTP1.1, http2.0,https比较

对http://repo1.maven.org/maven2/的请求返回501 HTTPS必需的状态和主体