React Native+Axios仅iPhone14 Pro出现Error 404问题求助
核心问题
在React Native 0.72.6 + Axios环境下,调用8080端口的HTTPS API时,仅iPhone 14 Pro及对应模拟器返回404错误,切换到默认HTTPS端口443后所有设备正常,其他设备(Android、iPhone 6/8/12)无异常。
可能原因及解决方法
1. iOS 16+ 对非标准HTTPS端口的网络限制
iPhone 14 Pro搭载的iOS版本多为16及以上,Apple在该版本中强化了网络安全策略,对非标准HTTPS端口(如8080)的请求存在额外校验或拦截逻辑。
解决办法:
修改Info.plist中的NSAppTransportSecurity配置,明确允许目标域名的8080端口HTTPS请求:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <false/> <key>NSExceptionDomains</key> <dict> <key>你的API域名.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <!-- 允许8080端口的HTTPS请求 --> <key>NSTemporaryExceptionAllowsPortHTTPS</key> <array> <string>8080</string> </array> </dict> </dict> </dict>
注意:NSAllowsArbitraryLoads设为false时,必须通过NSExceptionDomains精准配置允许的域名和端口,iOS 16+对模糊配置的容忍度极低。
2. Axios的URL端口解析问题
部分版本的Axios在iOS 16+环境下,对URL中端口的解析可能存在异常,即使已更新到最新版本,仍需确认请求URL的拼接逻辑。
解决办法:
手动拼接完整URL,避免依赖Axios自动解析:
// 明确指定带端口的基础URL const baseURL = 'https://你的API域名.com:8080'; axios.get(`${baseURL}/api/你的接口路径`);
同时检查是否存在URL编码问题,确保端口号未被意外转义。
3. iPhone 14 Pro网络栈的特殊路由策略
iPhone 14 Pro的网络硬件(如5G模块)或系统网络栈对非标准端口的HTTPS请求有不同的路由处理,可能导致请求无法正确抵达服务器。
解决办法:
- 模拟器端:检查Mac防火墙是否拦截了8080端口的出站请求;
- 真机端:切换网络(Wi-Fi/蜂窝数据)测试,排除运营商的端口限制;
- 服务器端查看访问日志,确认iPhone 14 Pro的请求是否真的到达服务器,还是在客户端被拦截。
4. TLS版本兼容性问题
iOS 16+要求HTTPS连接使用TLS 1.2及以上版本,如果服务器8080端口的HTTPS服务使用了较低版本的TLS,会被iPhone 14 Pro拒绝,但旧设备可能兼容。
解决办法:
- 服务器端升级TLS版本至1.2或1.3;
- 用命令
openssl s_client -connect 你的API域名.com:8080验证服务器的TLS配置。
内容的提问来源于stack exchange,提问作者Marcelo de Sá

