$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的主要内容,如果未能解决你的问题,请参考以下文章