こんな感じで HTTPヘッダに Range を指定すればいい。
NSString *requestRange = [NSString stringWithFormat:@"bytes=%d-", downloadedBytes]; [req setValue:requestRange forHTTPHeaderField:@"Range"];
レスポンスは 206(Partial Content)が返る。ヘッダを見てどの部分のデータが戻ってきたかを判断する。以下、抜粋を転載。
switch (httpResponse.statusCode) { case 206: { NSString *range = [httpResponse.allHeaderFields valueForKey:@"Content-Range"]; NSError *error = nil; NSRegularExpression *regex = nil; // Check to see if the server returned a valid byte-range regex = [NSRegularExpression regularExpressionWithPattern:@"bytes (\\d+)-\\d+/\\d+" options:NSRegularExpressionCaseInsensitive error:&error]; NSTextCheckingResult *match = [regex firstMatchInString:range options:NSMatchingAnchored range:NSMakeRange(0, range.length)]; if (match.numberOfRanges < 2) { [fh truncateFileAtOffset:0]; break; } NSString *byteStr = [range substringWithRange:[match rangeAtIndex:1]]; NSInteger bytes = [byteStr integerValue];