iOS移动应用未配置重发逻辑却重复发送相同请求问题咨询
iOS 系统自动重发网络请求的机制说明
iOS 系统网络栈确实存在多类无需应用层触发的自动重试逻辑,会导致毫秒级间隔的重复请求,匹配你遇到的场景,常见触发场景如下:
URLSession幂等请求自动重试:iOS 13 及以上版本中,系统URLSession默认会对判定为幂等的请求(GET、HEAD、PUT、DELETE 等默认归为幂等,POST 可通过配置修改幂等属性),在底层TCP握手、TLS协商阶段出现极短网络波动时自动触发重试,该动作完全由系统网络栈执行,上层应用无感知,重试间隔通常仅为数毫秒,且不会受应用层设定的超时、重发逻辑约束。- Multipath TCP 路径择优重试:如果应用开启了 Multipath TCP 支持,且设备同时接入Wi-Fi与蜂窝网络,系统会为了择优选择传输路径,自动通过备用路径重发一次请求对比链路质量,也会出现短间隔重复请求的情况。
- 网络扩展插件触发的重发:如果用户设备安装了VPN、广告拦截、流量监控类网络扩展应用,部分扩展的探测逻辑会主动重发一次目标请求用于特征识别,也会被服务端识别为同源重复请求。
排查验证方案参考:
- 修改请求为非幂等属性后复现测试,若重复请求消失即可判定为
URLSession幂等重试机制导致- 客户端侧抓包查看两次请求的TCP序列号,若首次请求的SYN包未收到服务端ACK,第二次为系统自动重发的SYN包,可确认是TCP层自动重试
- 关闭应用的Multipath TCP权限后测试,排查是否为链路择优逻辑触发的重复请求
内容的提问来源于stack exchange,提问作者Mariusz Antonik
相关产品推荐
相关产品推荐

