How to query the last modification date of a file via HTTP on the iPhone using NSHTTPURLResponse?

cocoa-touch, ios, iphone, nsurlrequest, objective-c

Solution

This answer assumes your server supports it, but what you do is send a "HEAD" request to the file URL and you get back just the file headers. You can then inspect the header called "Last-Modified" which normally has the date format `@"EEE',' dd MMM yyyy HH':'mm':'ss 'GMT'"`.

Here's some code:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"HEAD"];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
if ([response respondsToSelector:@selector(allHeaderFields)]) 
{
  NSDictionary *dictionary = [response allHeaderFields];
  NSString *lastUpdated = [dictionary valueForKey:@"Last-Modified"];
  NSDate *lastUpdatedServer = [fileDateFormatter dateFromString:lastUpdated];

  if (([localCreateDate earlierDate:lastUpdatedServer] == localCreateDate) && lastUpdatedServer) 
  {
    NSLog(@"local file is outdated: %@ ", localPath);
    isLatest = NO;
  } else {
    NSLog(@"local file is current: %@ ", localPath);
  }

} else {
  NSLog(@"Failed to get server response headers");
}

Of course, you probably want this to be done asynchronously in the background, but this code should point you in the right direction.

Best Regards.

Problem

In my iPhone application I need to query the last modification date of an internet `.m4a` file via `HTTP`, but I DON'T want to downloading it. I'm reading Apple's documentation about `NSURLRequest` and `NSHTTPURLResponse`, but it seems to be all related to downloading the file and not querying it first. Maybe I'm wrong. How can I know the last modification date of a `.m4a` file, via `HTTP`, WITHOUT downloading it? Thanks!

Original source