根據(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;
}