You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS端Alamofire请求频繁出现-1001、-1004、-1020错误排查求助

iOS端Alamofire请求频繁出现-1001、-1004、-1020错误排查求助

Hey,我之前也碰到过类似的低概率网络错误问题,结合你给出的信息,咱们来一步步拆解可能的原因和排查方向:

首先得先明确这三个系统错误码的核心含义,方便针对性排查:

  • -1001:对应NSURLErrorTimedOut,也就是请求超时,要么是服务器响应太慢,要么是中间网络链路丢包导致数据传输中断,也可能是客户端设置的超时时间太短
  • -1004:对应NSURLErrorCannotConnectToHost,无法连接到目标主机,常见原因是DNS解析波动、运营商路由临时故障,或者服务器瞬时过载拒绝新连接
  • -1020:对应NSURLErrorCannotEstablishSecureConnection,无法建立安全连接,哪怕你开了NSAllowsArbitraryLoads,ATS还是会做基础的安全校验,比如TLS版本兼容、证书链完整性等问题

结合你的场景(仅iPhone出现、1%低概率、能上报Firebase),有几个关键点值得关注:

  • 能上报到Crashlytics说明设备当时肯定有网络,排除完全断网的情况,大概率是局部网络链路波动或者服务器端瞬时异常,比如某些运营商的节点临时故障、CDN缓存节点出错,或者服务器峰值时部分请求处理超时
  • 仅iPhone出现,有没有统计过是特定iOS版本的设备?比如老版本iOS(比如iOS 12及以下)的TLS兼容逻辑和新版本不同,或者iPhone的蜂窝网络模块特性和iPad有差异?比如某些运营商的蜂窝网络在iPhone上的路由和iPad不一样?

接下来给你几个具体的排查建议:

  • 检查Alamofire的超时设置:默认的超时时间可能不够应对某些场景,比如大 payload 请求或者服务器繁忙时段,你可以尝试调整请求的timeoutInterval参数(比如从默认的60秒改成120秒),看看能不能减少-1001的出现概率
  • 增加精细化日志埋点:在Alamofire的请求拦截器里添加详细日志,比如DNS解析耗时、连接建立耗时、TLS握手耗时,还有错误发生时的网络环境(蜂窝/Wi-Fi、运营商信息),这样能定位到是不是特定网络环境下的问题
  • 联动服务器端排查:让后端同事查一下这些错误请求对应的服务器日志,看看是不是服务器当时有过载、或者请求被防火墙/CDN拦截了?比如-1004可能是CDN节点临时下线,-1020可能是服务器证书链不完整,对某些iOS版本不兼容
  • 重新审视ATS设置:虽然你开了NSAllowsArbitraryLoads,但如果请求是HTTPS协议,ATS还是会校验TLS版本和证书,你可以检查服务器的TLS版本是不是低于iOS支持的最低版本(比如iOS 13+要求TLS 1.2+),或者证书有没有过期、链是否完整
  • 模拟场景复现:因为是1%的低概率,手动复现很难,你可以用工具模拟网络波动,比如用Xcode的Network Link Conditioner模拟弱网、超时,或者用Charles的Throttle功能模拟丢包,看看能不能触发相同的错误;另外也可以收集出错用户的设备信息,看看是不是有特定群体(比如某运营商、某iOS版本)集中出现问题

备注:内容来源于stack exchange,提问作者mohsen

火山引擎 最新活动