ASIDownloadCache: If we get a max-age, ignore any Expires header
closes gh-108
Showing
1 changed file
with
14 additions
and
10 deletions
| @@ -299,14 +299,6 @@ static NSString *permanentCacheFolder = @"PermanentStore"; | @@ -299,14 +299,6 @@ static NSString *permanentCacheFolder = @"PermanentStore"; | ||
| 299 | 299 | ||
| 300 | if ([self shouldRespectCacheControlHeaders]) { | 300 | if ([self shouldRespectCacheControlHeaders]) { |
| 301 | 301 | ||
| 302 | - // Look for an Expires header to see if the content is out of date | ||
| 303 | - NSString *expires = [cachedHeaders objectForKey:@"Expires"]; | ||
| 304 | - if (expires) { | ||
| 305 | - if ([[ASIHTTPRequest dateFromRFC1123String:expires] timeIntervalSinceNow] >= 0) { | ||
| 306 | - [[self accessLock] unlock]; | ||
| 307 | - return YES; | ||
| 308 | - } | ||
| 309 | - } | ||
| 310 | // Look for a max-age header | 302 | // Look for a max-age header |
| 311 | NSString *cacheControl = [[cachedHeaders objectForKey:@"Cache-Control"] lowercaseString]; | 303 | NSString *cacheControl = [[cachedHeaders objectForKey:@"Cache-Control"] lowercaseString]; |
| 312 | if (cacheControl) { | 304 | if (cacheControl) { |
| @@ -315,17 +307,29 @@ static NSString *permanentCacheFolder = @"PermanentStore"; | @@ -315,17 +307,29 @@ static NSString *permanentCacheFolder = @"PermanentStore"; | ||
| 315 | [scanner scanString:@"=" intoString:NULL]; | 307 | [scanner scanString:@"=" intoString:NULL]; |
| 316 | NSTimeInterval maxAge = 0; | 308 | NSTimeInterval maxAge = 0; |
| 317 | [scanner scanDouble:&maxAge]; | 309 | [scanner scanDouble:&maxAge]; |
| 318 | - NSDate *fetchDate = [ASIHTTPRequest dateFromRFC1123String:[cachedHeaders objectForKey:@"X-ASIHTTPRequest-Fetch-date"]]; | ||
| 319 | 310 | ||
| 311 | + NSDate *fetchDate = [ASIHTTPRequest dateFromRFC1123String:[cachedHeaders objectForKey:@"X-ASIHTTPRequest-Fetch-date"]]; | ||
| 320 | NSDate *expiryDate = [[[NSDate alloc] initWithTimeInterval:maxAge sinceDate:fetchDate] autorelease]; | 312 | NSDate *expiryDate = [[[NSDate alloc] initWithTimeInterval:maxAge sinceDate:fetchDate] autorelease]; |
| 321 | 313 | ||
| 322 | if ([expiryDate timeIntervalSinceNow] >= 0) { | 314 | if ([expiryDate timeIntervalSinceNow] >= 0) { |
| 323 | [[self accessLock] unlock]; | 315 | [[self accessLock] unlock]; |
| 324 | return YES; | 316 | return YES; |
| 325 | } | 317 | } |
| 318 | + // RFC 2612 says max-age must override any Expires header | ||
| 319 | + [[self accessLock] unlock]; | ||
| 320 | + return NO; | ||
| 326 | } | 321 | } |
| 327 | } | 322 | } |
| 328 | - | 323 | + |
| 324 | + // Look for an Expires header to see if the content is out of date | ||
| 325 | + NSString *expires = [cachedHeaders objectForKey:@"Expires"]; | ||
| 326 | + if (expires) { | ||
| 327 | + if ([[ASIHTTPRequest dateFromRFC1123String:expires] timeIntervalSinceNow] >= 0) { | ||
| 328 | + [[self accessLock] unlock]; | ||
| 329 | + return YES; | ||
| 330 | + } | ||
| 331 | + } | ||
| 332 | + | ||
| 329 | // No explicit expiration time sent by the server | 333 | // No explicit expiration time sent by the server |
| 330 | [[self accessLock] unlock]; | 334 | [[self accessLock] unlock]; |
| 331 | return NO; | 335 | return NO; |
-
Please register or login to post a comment