You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ionic 3 Angular Http请求在iOS设备及模拟器中无法正常工作

解决Ionic+Angular Http在iOS上请求返回状态码0的问题

这种iOS上请求返回状态码0的坑我之前踩过好几次,结合你已经配置了ATS和Whitelist插件的情况,给你几个具体的排查和解决方向:

  • 仔细核对NSAppTransportSecurity的配置细节
    有时候看似正确的配置,实际在Xcode的Info.plist里可能有遗漏或者格式错误。建议直接打开Xcode中项目的Info.plist文件(别只看项目根目录的配置文件),确认ATS的配置是否覆盖了你的API域名:

    <key>NSAppTransportSecurity</key>
    <dict>
        <!-- 测试阶段可先开启全量允许排查问题 -->
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <!-- 正式环境建议配置特定域名例外 -->
        <!-- <key>NSExceptionDomains</key>
        <dict>
            <key>your-api-domain.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSAllowsArbitraryLoads</key>
                <true/>
            </dict>
        </dict> -->
    </dict>
    

    注意如果同时配置了NSAllowsArbitraryLoads和NSExceptionDomains,要确保例外域名的规则优先级正确。

  • 确认cordova-plugin-whitelist的权限配置
    即使安装了插件,也要保证config.xml里的网络权限规则正确:

    <!-- 允许所有网络请求(测试用,正式环境建议指定域名) -->
    <access origin="*" />
    <allow-navigation href="*" />
    <allow-intent href="*" />
    

    很多时候白名单规则不完整会导致iOS拦截请求,先尝试用通配符*测试,如果问题解决了再缩小到特定域名。

  • 检查Angular请求的路径是否正确
    别用相对路径发起请求!iOS上相对路径会被解析成file://协议的本地路径,直接导致请求失败。确保你的请求用的是完整的http/https绝对路径,比如https://your-api-domain.com/api/get-data,而不是/api/get-data。

  • 排查iOS设备的网络环境
    有时候不是代码的问题,是设备本身的网络限制:比如设备连接了代理、公司防火墙拦截了API请求,或者网络不稳定。可以直接在iOS的Safari里打开你的API地址,看看能不能正常返回数据,排除网络层面的问题。

  • 升级依赖版本
    旧版本的依赖可能存在iOS特定的bug:

    • 升级cordova-ios到最新稳定版(比如6.x以上)
    • 把Angular的Http模块换成HttpClient(Http已经被废弃,HttpClient有更好的兼容性和错误处理)
    • 更新cordova-plugin-whitelist到最新版本
  • 用Xcode查看详细错误日志
    状态码0太笼统了,打开Xcode连接你的iOS设备,运行app后查看控制台日志,里面会有更具体的错误信息——比如是不是SSL证书不被信任、ATS的具体拦截原因,这些信息能帮你快速定位问题。

内容的提问来源于stack exchange,提问作者AnKr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:20:46