NSURLResponse返回Content-Range,忽略我要求的范围

时间:2013-03-19 20:12:15

标签: ios nsurlrequest nsurlcache

下载文件时,我希望能够恢复下载。例如:

NSFileManager *fm = [NSFileManager defaultManager];
NSString *downloadTempPath = [_tempPath path];
if ([fm fileExistsAtPath:downloadTempPath]) {
    // We have a partial download. Get the rest of the file starting at byteCount
    NSDictionary *dAttrib = [fm attributesOfItemAtPath:downloadTempPath error:nil];
    NSUInteger byteCount = [dAttrib fileSize];
    NSLog(@"Preparing to resume download: %@", downloadTempPath);
    NSString *requestRange = [NSString stringWithFormat:@"bytes=%d-", byteCount];
   [self.request setValue:requestRange forHTTPHeaderField:@"Range"];
}

这将产生一个带有如下标题的get请求:

  

范围:字节= 1000-

我希望前206个响应给我一个块,我要求它开始,有一个标题和这样的值(从allHeaderFields转储):

  

“Content-Range”=“bytes 1000-340197 / 340198”;

但有时它会向前跳并返回类似的东西:

  

“Content-Range”=“bytes 32000-340197 / 340198”;

这真的很糟糕,因为我需要1000-32000这些字节,而且它没有给我。

我知道没有服务器错误,因为当我卷曲到服务器时它会返回我要求的部分。此外,当我使用wireshark时,我看不到任何数据包进入服务器。所以这是iOS方面的问题,可能是NSURLCache

1 个答案:

答案 0 :(得分:1)

这似乎是NSURLCache中的错误。当我发现问题已经发生时,我会执行以下操作并再试一次。

    [[NSURLCache sharedURLCache] removeCachedResponseForRequest:self.request]; 

一旦我这样做了,问题就不会再发生了。它似乎治愈了缓存。我在iOS5.0上看到了这个,因为我再也无法重现,我不知道它是否发生在较新的操作系统上。