Axios仅在安卓端返回[Error: Network Error] iOS端运行正常
问题原因
相同请求在iOS正常、安卓端抛出Network Error是安卓平台特有的网络限制或适配问题导致的,核心原因分为以下几类:
- SSL证书校验不通过:你的请求用了非标准HTTPS端口11443,大概率是测试环境用了自签名/过期/域名不匹配的SSL证书。iOS如果在开发阶段放开了证书校验限制可以正常请求,但安卓7及以上系统默认不信任用户安装的根证书,应用未做特殊配置时会直接拦截该类请求,抛出网络错误。
- 网络权限或端口拦截:安卓应用未申请网络权限,或者11443端口被安卓本地防火墙、运营商网络、路由策略拦截,iOS侧的网络环境没有对应拦截规则所以可以正常访问。
- WebView适配问题:如果你的代码运行在安卓WebView的H5环境中,安卓WebView默认的跨域限制、混合内容拦截规则比iOS更严格,未做适配时也会触发网络错误。
- 请求格式兼容问题:部分低版本安卓系统对
application/json类型的POST请求兼容异常,也会导致请求发送失败。
解决方法
你可以按以下顺序排查解决:
- 处理SSL证书校验问题
测试阶段可以给安卓应用添加网络安全配置:在res/xml目录下新建network_security_config.xml,添加对应域名的证书信任规则,也可以临时放开所有证书校验(仅测试可用,禁止线上使用);线上环境必须更换为CA机构颁发的正规受信任SSL证书,确保证书域名、有效期、证书链配置正确。 - 检查权限与端口配置
确认AndroidManifest.xml中已经添加网络权限声明:
测试时可以将服务端端口临时改为443(默认HTTPS端口)验证是否是端口拦截问题,如果是更换端口或者联系网络服务商放开11443端口的访问限制。<uses-permission android:name="android.permission.INTERNET" /> - WebView场景适配
如果是WebView内运行的H5代码,给WebView添加以下配置:WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setAllowFileAccess(true); // 允许混合内容,仅测试阶段使用 settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); - 兼容请求格式
可以先打印完整错误信息确认错误类型:
如果是请求格式兼容问题,可以尝试把Content-Type改为表单类型,适配低版本安卓:.catch(function (error) { console.log(error.toJSON()); // 输出完整错误信息,区分是证书错误、超时还是连接被拒 console.error(error); });let dataToSend = new FormData(); dataToSend.append('username', 'someUsername'); dataToSend.append('password', 'somePassword'); axios.post('https://some-domain.com:11443/websrc/login',dataToSend,{ headers: { 'Content-Type': 'application/x-www-form-urlencoded', } })
内容的提问来源于stack exchange,提问作者Ambili
相关产品推荐
相关产品推荐

