-1103错误域= NSURLErrorDomain代码= -1103“资源超出最大大小” iOS 13

时间:2019-07-09 15:07:27

标签: ios13

当响应在iOS 13上达到某种程度的大(14kb)时,我们将面临以下网络错误。

[-1103] Error Domain=NSURLErrorDomain Code=-1103 "resource exceeds maximum size"

在使用Alamofire时,此问题被视为错误结果,这破坏了我们对结果的处理。

奇怪的是,如果我们直接使用NSURLSession,尽管从日志记录中仍然可以看到此错误,但实际上我们不会在

的回调中收到它
session.dataTask(with: request) { value, response, error in ... }

所以结果可以正确处理。

此问题从未见过。有人对此有想法吗?

11 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,并找到了解决方案。

使用GET时无法在主体中传递参数。

如果支持API,请使用POST方法,或通过如下所示的URL传递。

AnyURL?Parameter = Value&Parameter = Value

答案 1 :(得分:3)

只需避免针对httpBody API请求使用GET

if requestType != .get{
     request.httpBody = data
}

OR

对于GET请求,请将参数而不是httpBody

附加到URL中

一切都像魅力一样。

答案 2 :(得分:2)

我遇到了这个问题,因为我在发送get请求时在Alamofire中传递了空参数。因此,我没有发送空参数,而是将其替换为nil。

答案 3 :(得分:2)

GET请求中传递查询参数,如下所示:

let parameters: Parameters = [
    "param": value
]
Alamofire.request(urlString, method: .get, parameters: parameters, encoding: URLEncoding.queryString)

答案 4 :(得分:2)

我使用默认的url编码而不是默认的json编码,并且对我有用。

Alamofire.request(url, method: .get, parameters: param, encoding: URLEncoding.default)

OR

如果您使用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)
    }
}

答案 5 :(得分:2)

我更改了编码->

JSONEncoding.default to URLEncoding.default 

成功了!

答案 6 :(得分:1)

在Slack社区的帮助下,我们发现答案是 on iOS13, it is not allowed to add a body in GET request.要使其再次起作用,我们可以切换到发布请求,也可以将正文添加为GET请求的url参数。

答案 7 :(得分:0)

最后找到答案。对于GET服务,我试图添加httpBody。像这样:

do {
    request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
} catch let error {
    errorCompletion(error)
    return
}

解决方案是,如果httpMethod是GET,则添加一个if以避免该代码块。似乎是iOS 13的新行为,而Swift给出的错误消息绝对没有帮助

答案 8 :(得分:0)

当我使用Xcode 11编译时,我只会看到此问题。如果我恢复到Xcode 10.3,则不会再遇到相同的问题。虽然不是永久性的修复,但是如果您需要推出代码,则可以还原,直到有时间修复它为止。

答案 9 :(得分:0)

我的解决方法是我只将 Content-Length 设置为 nil,然后一切正常。因为在 Swift 中它仍然初始化 .parameters 的值。

.parameters

答案 10 :(得分:0)

此处您可能缺少传递给数据任务的 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.