使用HTTPS时,$http请求状态码为0是什么意思?

16

情况:

我正在开发一个Ionic应用程序,该应用程序从API接收数据。

之前,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网址的证书是否显示任何错误或警告? - piyuj
在浏览器中没有错误。关于服务器中的CORS支持,我不清楚。 - FrancescoMussi
@johnnyfittizio 在浏览器中,您将能够获取响应而没有错误,使用AJS时可能会出现错误,其中您将获得这个CORS,因此请尝试在服务器端启用https的CORS。您从哪里获取API平台?如果是C#,我可以帮助您启用它。 - Krsna Kishore
@johnnyfittizio 我想告诉你的另一点是,每个响应,即使是错误500,也必须附加CORS头。如果服务器没有将CORS头附加到错误500响应中,则XHR对象不会解析它,因此XHR对象将没有任何响应正文、状态或任何其他响应数据。 - Krsna Kishore
非常感谢您的努力!您所说的“在服务器端启用https的CORS”是什么意思?(API使用PHP编写) - FrancescoMussi
显示剩余5条评论
6个回答

2

这也是我的问题! - NitZRobotKoder

0

我认为从设备上来看,CORS不是问题。例如,请参见this。但是,如果您从浏览器进行测试,则出现CORS问题。 我认为问题在于您的白名单。 请在您的config.xml中添加(来源:this):

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

这只是一个猜测!


0

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


0

0
$http.get('/someUrl').success(successCallback);
如果您的应用程序通过HTTPS提供服务,则所做的任何调用都将使用相同的主机/端口等进行,因此也是通过HTTPS进行的。 如果您在请求中使用完整的URI,例如$http.get('http://foobar.com/somePath'),则必须更改URI以使用https。

-2

我也曾经遇到过这种问题。以下步骤可以帮助您解决问题:

  1. 创建新的Ionic应用程序
  2. 启动您的手机或模拟器
  3. 修改您的WWW目录
  4. 重新编译您的应用程序并启动您的手机或模拟器

问题在于,请检查是否正确添加了插件到您的Ionic应用程序中。

通过添加插件,我的应用程序问题得到了解决。

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


谢谢您的回复,@amila。但是我不太明白您提出的解决方案是什么,以便正确地从HTTPS获取API。 - FrancescoMussi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,