AFNetworking возвращает 200 вместо 304 — ETag

Я пытаюсь использовать etag для кэширования своих изображений, в первый раз он загружает все изображения, как и должен, однако во второй раз он делает то же самое, когда должен войти в блок с ошибкой с 304.

Я пытался сделать внешний запрос, и я получаю 304, как и должен, только с AFNetworking у меня проблемы

   NSString *urlString = [API_BASE_URL_PHOTOS stringByAppendingPathComponent:[photo getPathToPhoto]];
    NSString *properlyEscapedURL = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:properlyEscapedURL];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    if ([UserDefaultManager getEtagForKey:photo.nom] != nil) {
        [request setValue:[UserDefaultManager getEtagForKey:photo.nom] forHTTPHeaderField:ETAG_IF_NONE_MATCH];
    } 
    [request setHTTPMethod:API_METHOD_GET];

AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:nil
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

    [FileUtils createDirectoryInDocumentsWithFileName:photo.folderName];
    NSString *docPath = [FileUtils getPathInDocumentsWithFileName:[photo getPathToPhoto]];

    // Save Image
    NSData *imageData = UIImageJPEGRepresentation(image, 90);
    [imageData writeToFile:docPath atomically:YES];


    if ([response respondsToSelector:@selector(allHeaderFields)]) {
        NSDictionary *allHeaderFields = [response allHeaderFields];
        [UserDefaultManager setEtag:[allHeaderFields objectForKey:ETAG] forKey:photo.nom];
    }


    if ([[DownloadManager sharedManager].downloadQueue.operations count] == 0) {
        [[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_DOWNLOAD_ALL_PHOTOS_FINISHED object:nil];
    }
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    if (response.statusCode != RESPONSE_CODE_PHOTO_UP_TO_DATE) {
        LogDebug(@"%@", [error localizedDescription]);
    }

}];

person Mike Bryant    schedule 06.08.2013    source источник
comment
Если вы отправляете запрос извне и получаете 304, и вы делаете это в AFNetworking и получаете 200, вы, вероятно, делаете запрос по-другому. AFNetworking не содержит никакого кода, который изменил бы код состояния HTTP, возвращаемый вашим сервером.   -  person Aaron Brager    schedule 06.08.2013
comment
да, мне удалось это выяснить, я изменил свой запрос на NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10]; и это сделало свое дело   -  person Mike Bryant    schedule 07.08.2013


Ответы (1)


Мне удалось исправить это, изменив мой запрос на

  NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]
                                                               cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                                                           timeoutInterval:60];

надеюсь, что это поможет

person Mike Bryant    schedule 07.08.2013
comment
Интервал времени ожидания по умолчанию для NSURLRequest составляет 60 секунд; Я бы придерживался этого, если у вас нет причины, по которой вы перешли на 10. - person Aaron Brager; 07.08.2013
comment
спасибо, я изменил его на 60, он был установлен на 10 в примере, который я видел - person Mike Bryant; 07.08.2013