nsurlerrordomain code=-1004 表示无法连接到服务器,主因包括ats配置不当、系统代理干扰、localhost未适配、证书校验失败或服务器端口不可达;需依次检查info.plist例外规则、关闭macos代理、放行本地网络、配置afnetworking证书策略及验证服务器连通性。

如果您在iOS应用中遇到 NSURLErrorDomain Code=-1004 “未能连接到服务器”错误,该问题常与App Transport Security(ATS)配置相关,但也可能由其他网络层因素引发。以下是针对此错误的多种排查与修复路径:
一、检查并配置Info.plist中的ATS例外规则
ATS默认强制要求HTTPS通信,若请求目标为HTTP域名或未符合TLS 1.2+及证书校验标准的HTTPS服务,则会直接拒绝连接,表现为-1004错误。需为特定域名显式声明例外。
1、在Xcode中打开项目根目录下的Info.plist文件。
2、添加NSAppTransportSecurity字典类型键(若不存在)。
3、在该字典下添加NSExceptionDomains子字典。
4、为待访问的域名(如example.com)添加一个key,其值为字典;在该字典内设置以下三项:
NSIncludesSubdomains:Boolean类型,设为YES;
NSExceptionAllowsInsecureHTTPLoads:Boolean类型,设为YES(仅限HTTP调试);
NSExceptionRequiresForwardSecrecy:Boolean类型,设为NO(若服务器不支持前向保密)。
5、若使用自签名或非公信CA证书,还需额外添加NSExceptionAllowsInsecureHTTPLoads并设为YES,且确保NSAllowsArbitraryLoads未被设为YES(避免全局禁用ATS)。
二、验证AFNetworking 3.x的SSL证书固定策略
AFNetworking 3.0及以上版本在iOS 11+环境下默认启用严格证书校验,若未配置securityPolicy或配置不当,将导致-1004错误,尤其在使用自签名证书或中间证书缺失时。
1、从服务器导出有效证书(.crt格式),保存为server.crt。
2、在终端执行转换命令:openssl x509 -in server.crt -out server.cer -outform der。
3、将生成的server.cer拖入Xcode项目,勾选“Copy items if needed”及对应Target。
4、在初始化AFHTTPSessionManager后,插入如下配置代码:
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"server" ofType:@"cer"];
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
policy.allowInvalidCertificates = YES;
小猿AI(iOS)3.136.0版本更新重点优化拍照批改与题目识别速度,提升复杂手写题的识别准确率,并新增“错题智能归类”与“AI分步骤讲解”功能,帮助学生更清晰理解解题过程。同时优化学习数据面板展示,让家长可更直观掌握学习进度,整体提升作业检查与学习辅导体验。
policy.pinnedCertificates = [NSSet setWithObject:certData];
policy.validatesDomainName = YES;
manager.securityPolicy = policy;
三、排查系统级代理与网络环境干扰
macOS系统代理设置可能被iOS模拟器或真机调试继承,特别是启用PAC脚本或自动代理配置时,会导致CFNetwork底层解析失败并返回-1004(_kCFStreamErrorCodeKey=61/65),与服务器可达性无关。
1、打开macOS“系统设置”→“网络”→选择当前活跃接口(如Wi-Fi)→点击“详细信息…”。
2、切换至“代理”标签页。
3、取消勾选“自动代理配置”及所有已启用的代理协议(如Web Proxy、Secure Web Proxy等)。
4、点击“好”,再点击“应用”保存设置。
5、重启Xcode与iOS模拟器(或断开重连真机)。
四、确认本地测试域名localhost或127.0.0.1的ATS适配
iOS不允许对localhost或127.0.0.1使用NSExceptionDomains例外,必须通过NSAllowsLocalNetworking或NSAllowsArbitraryLoadsInWebContent(仅限WKWebView)进行特殊放行,否则即使配置了例外域仍返回-1004。
1、在Info.plist的NSAppTransportSecurity字典下,添加Boolean类型键:NSAllowsLocalNetworking,值设为YES。
2、若仅在WKWebView中加载本地资源,可改用:NSAllowsArbitraryLoadsInWebContent,值设为YES。
3、确保URL使用http://localhost:端口号/ 或 http://127.0.0.1:端口号/ 格式,不可混用host别名(如http://mylocal.dev)。
4、真机调试时,localhost无法指向Mac,须改用Mac局域网IP(如http://192.168.x.x:端口),并在NSExceptionDomains中为其单独配置例外。
五、验证服务器端网络可达性与端口开放状态
-1004错误表层含义是客户端完全无法建立TCP连接,可能源于服务器未监听、防火墙拦截、端口未开放或DNS解析失败,而非ATS本身。ATS触发的是更明确的-1022(ATS拒绝)错误。
1、在Mac终端执行:ping your-domain.com,确认基础ICMP连通性。
2、执行:telnet your-domain.com 443(HTTPS)或 telnet your-domain.com 80(HTTP),验证目标端口是否响应。
3、若telnet超时或报“Connection refused”,说明服务器未运行、端口未监听或被云服务商安全组屏蔽。
4、在iOS设备上使用Safari访问同一URL,若同样失败,则排除App侧ATS配置问题,聚焦服务器与网络链路。










