根據(jù)HTTP的協(xié)議規(guī)定,304表示緩存,200表示成功,其他表示失敗。AFNetworking默認(rèn)是把304的Code變成200了,然后去拿緩存數(shù)據(jù)。這個(gè)在我們需要自定義304策略的時(shí)候會(huì)有問題。解決方案是為AFHTTPSessionManager的
requestSerializer設(shè)置標(biāo)準(zhǔn)行為. [httpSessionManager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];附一份自己的代碼,免得下次進(jìn)來忘記了。
+(NSURLSessionDataTask *)productGET:(NSString *)interfacePath
tableType:(NSString *)page
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
{
[EasyNetwork userIdSuccess:^(NSString *userId) {
AFHTTPSessionManager *httpSessionManager =[AFHTTPSessionManager manager];
httpSessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
[httpSessionManager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
NSString *key = [NSString stringWithFormat:@"%@-%@", @"If-Modified-Since", page];
NSString *date = [[LocalCache sharedCache] cachedObjectForKey:key];
if(date != nil && ![date isEqualToString:@""]){
[httpSessionManager.requestSerializer setValue:@"Wed, 23 Oct 2014 05:13:30 GMT" //date
forHTTPHeaderField:@"If-Modified-Since"];
}
NSString *path = [NSString stringWithFormat:@"%@%@&userId=%@", kBaseURL, interfacePath, userId];
path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[httpSessionManager GET:path
parameters:nil
success:^(NSURLSessionDataTask *task, id responseObject){
NSString *tmp = [httpSessionManager.requestSerializer valueForHTTPHeaderField:@"If-Modified-Since"];
NSLog(@"Request If-Modified-Since:%@", tmp);
if ([task.response isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *r = (NSHTTPURLResponse *)task.response;
NSLog(@"StatusCode:%d" ,[r statusCode]);
NSDictionary *header = [r allHeaderFields];
NSString *date = [header objectForKey:@"Last-Modified"];
[[LocalCache sharedCache] storeCacheObject:date
forKey:key];
}
success(task, responseObject);
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
if ([task.response isKindOfClass:[NSHTTPURLResponse class]]) {
NSHTTPURLResponse *r = (NSHTTPURLResponse *)task.response;
NSLog(@"StatusCode:%d" ,[r statusCode]);
NSDictionary *header = [r allHeaderFields];
NSString *date = [header objectForKey:@"Last-Modified"];
[[LocalCache sharedCache] storeCacheObject:date
forKey:key];
}
failure(task, error);
}
];
} userIdFailure:^{
failure(nil, nil);
}];
return nil;
}