【问题标题】:why [response expectedContentLength] always return -1为什么 [response expectedContentLength] 总是返回 -1
【发布时间】:2011-11-17 01:43:39
【问题描述】:
-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse    *)response {
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    if([recievedData length]) [ recievedData setLength:0 ];

    download_size =[response expectedContentLength];
}

我有这个代码。 download_size 是 NSInteger。 预期内容长度总是返回:-1。 也许有人知道为什么?我试过用long,效果还是一样。

感谢您的帮助。

【问题讨论】:

    标签: iphone ios ipad connection nsurlconnection


    【解决方案1】:

    预期的内容长度仅在服务器提供时设置,例如通过 Content-Length 响应标头。 -1 大小表示预期的内容大小未知。

    如果您在请求中设置Accept-Encoding: gzip,URL 加载系统将告诉您预期的大小为-1,无论服务器发送什么 Content-Length。这是因为它在将数据传递给您之前对其进行了解压缩,但是直到所有数据都下载完成后才知道最终解压缩的大小,这在您收到此回调之后。

    【讨论】:

    • 对此进行扩展:如果您不说任何关于 Accept-Encoding 的内容,服务器可能会决定发送 gzip 压缩数据。为防止这种情况,请使用NSMutableURLRequest 并说[req setValue:@"" forHTTPHeaderField:@"Accept-Encoding"]。 (我从duplicate question 的回答中了解到这一点。)
    【解决方案2】:

    据我所知,NSURLResponse 不会更新该属性。您需要改用 NSHTTPURLResponse...

    【讨论】:

    • 我将声明更改为:-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response { 仍然返回 -1。我应该修改任何其他功能吗?
    • 正如 Jeremy 指出的那样,您应该检查服务器是否为您提供了该数据。 -1 是 NSURLResponseUnknownLength。 (我认为 nsurl 应该在压缩的情况下为您提供值。直视告诉我们,该值应该涵盖传输大小而不是未压缩的大小。但我不能为此咬牙切齿,因为我不知道确切实现它)
    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多