AFNetworking: requestes con ETag

Estoy intentando hacer una request en un server, que responde con un Etag para fines de caching. He escrito el siguiente código para ello, pero la respuesta para estas llamadas es aleatoria la mayor parte del time, es decir, a veces el código de estado de respuesta es 200 y algunas veces 304 (esperado). ¿Estoy haciendo algo mal en mi código o hay algo específico con AFNetworking que debo tener en count?

NSURL *url = [NSURL URLWithString:@"http://ia.media-imdb.comhttp://sofes.miximages.comM/MV5BNzI0NTY5NzQwMV5BMl5BanBnXkFtZTcwOTQyNTA5OA@@._V1._SY90_.jpg"]; NSMutableURLRequest *aRequest = [NSMutableURLRequest requestWithURL:url]; [aRequest setValue:@"\"61-smtLpBSL_SY90_#1\"" forHTTPHeaderField:@"If-None-Match"]; NSLog(@"headers: %@", aRequest.allHTTPHeaderFields); AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:aRequest imageProcessingBlock:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { NSLog(@"%@ %d", response.allHeaderFields, response.statusCode); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { NSLog(@"Request failed with error: %@", error); }]; [operation start]; 

Tuve el mismo problema, me las arreglé para solucionar esto cambiando mi request de

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

He intentado su código y recibo el estado 200 – OK, que es como debería ser.

Código 304 – No modificado, no pude getlo. He intentado ejecutar el command varias veces rápido y lento, pero siempre obtengo 200 como respuesta.

¿Tienes más detalles cuando sucede exactamente que obtienes 304 como código de respuesta?

El código de respuesta 304 generalmente significa que el contenido no se ha modificado y debe get la request original que tenía 200 como respuesta incluida en él.

Aquí puede leer un poco más sobre Etag: ETag vs Header Expires

También tuve un problema con la lógica Etag y AFNetworking. Mi problema fue que cachePolicy no se configuró correctamente …

  var manager = AFHTTPRequestOperationManager() manager.requestSerializer = AFHTTPRequestSerializer() manager.requestSerializer.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData manager.requestSerializer.setValue(etag, forHTTPHeaderField: "If-None-Match") manager.GET(fullPath, parameters: parameters, success: {}, failure: {})) 

¡Espero que ayude a alguien!