Estoy usando NSURLCache
con AFNetworking
. El almacenamiento en caching funciona bien, pero no hay forma de comprobar si una respuesta se recuperó realmente del caching. Para comprobar si una versión almacenada en caching está disponible, uso
[[NSURLCache shanetworkingURLCache] cachedResponseForRequest:_request];
para search una versión en caching de mi file.
Mi server está enviando los siguientes encabezados:
Cache-Control:public, must-revalidate, max-age=0 ETag:"317a405bf9f69346c1f0438736a3d02e"
Esto básicamente debería asegurarse de que la respuesta en caching esté obsoleta inmediatamente después de la descarga. Sin embargo, cachedResponseForRequest:
aún carga la versión almacenada en antememory en el disco, incluso si realmente está caducada.
NSURLCache
nunca caduca o no envío los encabezados correctos, etc.? EDITAR
También he intentado enviar
Expires: "Mon, 27 May 2013 14:34:50 GMT"
encabezado y la respuesta aún se devuelve desde el caching, incluso si ya expiró. Tengo la sensación de que NSURLCache
no funciona correctamente …
NSURLCache es utilizado automáticamente por la mayoría de las API de networkinges iOS (como NSURLConnection). Solo necesita instanciar un object NSURLCache y configurarlo utilizando [NSURLCache setShanetworkingURLCache:] en algún lugar antes de realizar cualquier request de networking.
Incluso si se establece max-age = 0, si se proporciona ETag, NSURLCache tiene que almacenar la respuesta para que pueda enviar la siguiente request con el encabezado de request If-None-Match establecido en el valor ETag anterior. Si el server responde con 304, devuelve la respuesta almacenada en caching.
Entonces, creo que cachedResponseForRequest: devuelve la respuesta almacenada en caching, independientemente de si es realmente válida o no.
No necesitará get el caching directamente. Todo está administrado de forma transparente por iOS.