You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 13下大响应触发NSURLErrorDomain -1103错误,Alamofire异常求助

这问题我之前帮朋友排查过类似的,咱们一步步拆解来看:

iOS 13下Alamofire触发-1103错误的解决思路

1. 先针对Alamofire的错误逻辑做特殊处理

Alamofire对系统NSURLError的拦截判定比原生NSURLSession严格得多,它会把NSURLErrorDomain Code=-1103直接包装成失败结果,但原生Session其实会忽略这个错误、只返回数据。你可以在请求回调里手动捕获这个错误码,跳过默认的错误处理流程:

AF.request(targetUrl).responseData { response in
    // 专门处理-1103错误
    if let systemError = response.error as NSError?,
       systemError.domain == NSURLErrorDomain && systemError.code == -1103 {
        if let validData = response.data {
            // 这里走你的正常数据解析逻辑
            handleResponseData(validData)
        }
    } else if response.error != nil {
        // 处理其他真实错误
        handleRealError(response.error!)
    } else {
        // 无错误的正常流程
        handleResponseData(response.data!)
    }
}

2. 自定义Alamofire的Session配置,取消资源尺寸限制

iOS 13的默认URLSession配置可能有隐性的响应尺寸限制,而Alamofire的默认配置继承了这个限制。你可以手动创建Session时,修改resourceLimits来取消限制:

let customConfig = URLSessionConfiguration.default
// 设置为0表示不限制响应尺寸
customConfig.resourceLimits.maximumResponseSize = 0
// 也可以根据需求设置具体数值,比如20*1024(20KB)
// customConfig.resourceLimits.maximumResponseSize = 20 * 1024

let customSession = Session(configuration: customConfig)
customSession.request(targetUrl).responseData { ... }

3. 排查响应数据的真实大小

有时候看似14KB的响应,可能因为gzip解压后体积变大,触发了系统的尺寸判定。你可以用抓包工具(比如Charles)确认实际返回的响应大小,或者尝试关闭Alamofire的自动解压,手动处理压缩数据:

let customConfig = URLSessionConfiguration.default
// 告诉服务器不要返回压缩数据,或者后续手动解压
customConfig.httpAdditionalHeaders = ["Accept-Encoding": "identity"]

let customSession = Session(configuration: customConfig)
customSession.request(targetUrl).responseData { ... }

4. 升级Alamofire版本到适配iOS 13的稳定版

如果你的Alamofire版本比较旧,可能存在和iOS 13的兼容性bug。建议升级到最新的稳定版本,新版本通常会修复这类系统版本适配的错误处理逻辑。


内容的提问来源于stack exchange,提问作者Jibeex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:41:28