-1103 错误域=NSURLErrorDomain 代码=-1103“资源超出最大大小”iOS 13
Posted
技术标签:
【中文标题】-1103 错误域=NSURLErrorDomain 代码=-1103“资源超出最大大小”iOS 13【英文标题】:-1103 Error Domain=NSURLErrorDomain Code=-1103 "resource exceeds maximum size" iOS 13 【发布时间】:2019-07-09 15:07:27 【问题描述】:当响应在 ios 13 上过大(14kb)时,我们会遇到以下网络错误。
[-1103] Error Domain=NSURLErrorDomain Code=-1103 "resource exceeds maximum size"
当我们使用 Alamofire 时,这个问题被视为错误结果,这会破坏我们对结果的处理。
奇怪的是,如果我们直接使用 NSURLSession,虽然从 logging 中仍然可以看到这个错误,但我们实际上并没有在
的回调中收到它session.dataTask(with: request) value, response, error in ...
所以结果可以正确处理。
这个问题以前从未见过。有人对此有所了解吗?
【问题讨论】:
我遇到了同样的问题。目前使用的是 macOS 10.15 beta 3 和 iOS 13 beta 3。不确定是否与 beta 版有关 ios13 阻止 GET 请求有正文。如果您的后端允许,请使用 POST 方法 但它与 live ios13 完美配合,当您使用 xcode 11 ios 13 开发时会出现问题。 @MoinShirazi 只有在使用 iOS 13+ sdk 编译时才会出现该问题 【参考方案1】:在 Slack 社区的帮助下,我们找到了答案:
on iOS13, it is not allowed to add a body in GET request.
为了让它再次工作,我们可以切换到 POST/PUT 请求或通过 GET 请求的 url 参数添加 body 值。
【讨论】:
谢谢,在您讨论的 Slack 社区中,我遇到了同样的问题。我还在 iOS 13 中使用 FileManager 面临另一个问题。 ***.com/questions/58081267/… 我的请求是使用方法 GET 并发送数据:,但不起作用;避免发送对象,它起作用了,谢谢!!【参考方案2】:在GET
请求中传递查询参数,如下所示:
let parameters: Parameters = [
"param": value
]
Alamofire.request(urlString, method: .get, parameters: parameters, encoding: URLEncoding.queryString)
【讨论】:
它有帮助。但为什么?请解释 感谢这对我有用。【参考方案3】:终于找到答案了。对于 GET 服务,我试图添加一个 httpBody。像这样的:
do
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
catch let error
errorCompletion(error)
return
解决方案只是添加一个 if 来避免如果 httpMethod 是 GET 的代码块。似乎是 iOS 13 的新行为,Swift 给出的错误消息绝对没有帮助
【讨论】:
那么你将如何传递参数呢?【参考方案4】:我遇到了同样的问题,并找出解决方案。
使用 GET 时不能在正文中传递参数。
如果 API 支持,则使用 POST 方法,或者在 URL 中传递,如下所示。
AnyURL?Parameter=Value&Parameter=Value
【讨论】:
直截了当...拯救我的一天:)【参考方案5】:对于GET
API 请求,请避免使用httpBody
。
if requestType != .get
request.httpBody = data
或
对于GET
请求将参数附加到URL 而不是HTTP body
使用以下扩展从字典中创建查询参数。
extension NSObject
func buildQueryString(fromDictionary parameters: [String:String]) -> String
var urlVars = [String]()
for (var k, var v) in parameters
let characters = (CharacterSet.urlQueryAllowed as NSCharacterSet).mutableCopy() as! NSMutableCharacterSet
characters.removeCharacters(in: "&")
v = v.addingPercentEncoding(withAllowedCharacters: characters as CharacterSet)!
k = k.addingPercentEncoding(withAllowedCharacters: characters as CharacterSet)!
urlVars += [k + "=" + "\(v)"]
return (!urlVars.isEmpty ? "?" : "") + urlVars.joined(separator: "&")
一切都像魅力一样发挥作用。
【讨论】:
【参考方案6】:我使用默认的 url 编码而不是默认的 json 编码,它对我有用。
Alamofire.request(url, method: .get, parameters: param, encoding: URLEncoding.default)
或
如果你使用 URLRequestConvertible
enum NetworkRouter: URLRequestConvertible
case someCase(lang:String)
var method: HTTPMethod
return .get
var parameters: Parameters?
switch self
case .someCase(let param):
return ["lang": param.lang]
default:
return nil
var url: URL
switch self
case .someCase(let param):
return URL(string: Constants.baseURL + Constants.endPoint)!
default:
return URL(string: Constants.baseURL)!
var encoding: ParameterEncoding
return URLEncoding.default
func asURLRequest() throws -> URLRequest
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = method.rawValue
return try encoding.encode(urlRequest, with: parameters)
【讨论】:
【参考方案7】:我遇到了这个问题,因为我在发送 get 请求时在 Alamofire 中传递了空参数。因此,我没有发送空参数,而是将其替换为 nil。
【讨论】:
【参考方案8】:我的解决方法是我只将.parameters
设置为零,然后一切正常。因为在 Swift 中它仍然会初始化 .parameters
的值。
self.request.parameters = nil
【讨论】:
【参考方案9】:我只在使用 Xcode 11 构建时看到这个问题。如果我恢复到 Xcode 10.3,我就不再有同样的问题了。虽然不是永久修复,但如果您需要推出代码,您可以恢复,直到您有时间修复它。
【讨论】:
【参考方案10】:在这里,您可能缺少传递给数据任务的 URL 请求的方法。您必须将 POST/PUT/DELETE 添加到 URL 请求方法参数,如下所示。
var request: URLRequest = URLRequest(url: SOME_VALID_URL)
request.body = SOME_VALID_DATA_IN_BYTES
request.method = "post" --> You are missing this.
【讨论】:
以上是关于-1103 错误域=NSURLErrorDomain 代码=-1103“资源超出最大大小”iOS 13的主要内容,如果未能解决你的问题,请参考以下文章
(错误域=NSPOSIXErrorDomain 代码=100“协议错误”
错误:错误域=NSURLErrorDomain 代码=-1001“请求超时。”