views:

726

answers:

2

I am pulling my hair out trying to conjure up the correct syntax to set the HTTP header information do a byte-range load from an HTTP server.

This is the offending method on NSMutableURLRequest - (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field

This is how I am using this method to load the first 512 byte of a URL request.

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
[request setHTTPMethod:@"GET"];
[request setValue:@"0-512\r\n" forHTTPHeaderField:@"Range"];

So far it is ignored and I always receive the entire data payload. I just want the range of bytes specified (0 - 512). Can someone please relieve my headache?

Update: I have used curl to confirm that my web server supports byte ranges thusly: curl --range 0-2047 http://www.somewhere.com/humungodata.dat -o "foobar"

The file size of foobar is 2048

Cheers, Doug

A: 

What you have there should be the correct way to add a header value to a URL request, however i thought only posts got header values, maybe im wrong, have you tried doing this on other enviroments and gotten it to work? Maybe take out the \r\n?

Daniel
A: 

Problem solved.

By adding additional header fields the code immediately worked correctly. Why? Dunno. But it works:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setHTTPMethod:@"GET"];

[request setValue:@"keep-live"  forHTTPHeaderField:@"Connection"];
    [request setValue:@"300"     forHTTPHeaderField:@"Keep-Alive"];
[request setValue:@"bytes=0-2047" forHTTPHeaderField:@"Range"];
dugla