2013-06-30 20 views
7

Il mio server sta impostando l'elemento di intestazione etag per il supporto di memorizzazione nella cache.If-None-Match e NSURLConnection

iOS (6.1.4) applicazione utilizza la classe NSURLConnection nativo di inviare richiesta XML al server

prima volta che il server invia la risposta con l'ETAG impostato nell'intestazione

Se l'iOS l'app sta inviando esattamente la stessa richiesta al server, posso vedere nei registri del server che l'intestazione if-none-match non è compilata da NSURLConnection

... e quindi il server risponde con 200 anziché 304

politica di cache utilizzata per la richiesta è:

[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad]; 

NSURLCache viene inizializzato con

[[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10]; 

Le mie domande: - È normale che NSURLConnection non ha fissato il campo di intestazione "If-None-Match" ? - Devo impostare questo campo di intestazione da solo? (ottenendo risposta dalla cache, leggendo il valore di etag e l'impostazione nell'intestazione della richiesta)?

risposta

1

Mi sono imbattuto nello stesso problema con questo. Per quanto mi riguarda, stavo usando il criterio di cache predefinito (NSURLRequestUseProtocolCachePolicy) e impostava automaticamente il campo dell'intestazione "if-none-match" che il server avrebbe controllato. Tuttavia, l'impostazione della politica della cache come "NSURLRequestReloadIgnoringLocalCacheData" ha ovviamente rimosso il campo di intestazione.

Avete provato gli altri valori della politica cache per vedere se aggiungono quell'intestazione?

un grande blog su questi diversi valori dei dati della cache può essere visto qui: http://nshipster.com/nsurlcache/

Edit: ho trovato un altro dello stack domanda di troppo pieno che conferma ciò che ho detto sopra: NSURLCache and ETags

0

Vedi anche i simboli in Xcode (tasto destro del mouse sul simbolo e "Vai alla definizione"). Ce ne sono alcuni che sono presenti ma non implementati, secondo i commenti del file!