React Native iOS16.1中NSAllowsArbitraryLoads无效,axios请求报错
解决React Native iOS中Axios请求报错-1004(无法连接服务器)的问题
针对你遇到的AxiosError: Network Error(错误码-1004)问题,结合你已完成的排查步骤,给出以下具体解决方案:
1. 检查BASE_URL的正确性
- 本地开发禁用
localhost:iOS模拟器的localhost指向模拟器自身,而非运行后端的电脑。请替换为电脑的局域网IP地址(例如http://192.168.1.100:3000),或使用127.0.0.1(仅对模拟器有效)。 - 核对协议与端口:确保
BASE_URL和Postman中使用的地址完全一致,比如后端用http而非https,端口号没有写错。
2. 确认iOS ATS配置生效
- 检查修改的
Info.plist路径:必须修改ios/[你的项目名称]/Info.plist,而非Pods目录下的文件。修改后需重新编译项目(先Clean Build Folder再运行)。 - 可替换全局ATS配置为精准域名配置(降低全局关闭ATS的风险):
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>你的后端域名/IP</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict>
3. 调整Axios请求配置
- 添加超时与明确请求头:Postman默认请求头可能和Axios默认存在差异,手动指定配置测试:
axios.post(`${BASE_URL}/auth/register`, { name, corporation, email, password }, { headers: { 'Content-Type': 'application/json' }, timeout: 10000 // 设置10秒超时 })
- 尝试使用导入的
ApiManager:你已导入ApiManager但未使用,它可能包含后端所需的拦截器或默认配置,替换成ApiManager.post试试:
ApiManager.post('/auth/register', { name, corporation, email, password })
4. 验证网络连通性
- 在iOS模拟器的Safari中直接访问
${BASE_URL}/auth/register:如果无法打开,说明是网络连通问题而非代码问题,此时检查:- 电脑与模拟器是否在同一局域网;
- 后端服务是否监听
0.0.0.0(而非127.0.0.1,否则仅本地可访问); - 电脑防火墙是否允许后端端口的入站请求。
5. 排查后端配置
- 检查IP白名单:部分后端会限制访问IP,Postman的请求IP与模拟器IP可能不同,需确保模拟器IP被允许;
- 确认跨域配置:虽然React Native iOS默认允许跨域,但如果后端有严格的CORS设置,可能拒绝请求,可临时添加允许所有来源的CORS配置测试。
内容的提问来源于stack exchange,提问作者cdxvy30
相关产品推荐
相关产品推荐

