2013-06-30 13 views
7

Mein Server setzt das Etag-Header-Element für die Caching-Unterstützung.If-None-Match und NSURLConnection

iOS (6.1.4) Anwendung ist die native NSURLConnection Klasse unter Verwendung von XML-Anforderung an den Server die Antwort der Server mit dem ETAG im

Header gesetzt sendet

erstes Mal senden

Wenn die iOS App sendet genau die gleiche Anfrage an den Server, ich kann in den Serverprotokollen sehen, dass der Header if-none-match nicht von NSURLConnection

... erfüllt ist und der Server antwortet mit 200 statt 304

Cache Politik für die Anforderung verwendet wird:

[request setCachePolicy:NSURLRequestReturnCacheDataElseLoad]; 

NSURLCache mit

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

Meine Fragen initialisiert: - Ist es normal, dass NSURLConnection nicht die "if-keine-match" Header-Feld festgelegt haben ? - Muss ich dieses Header-Feld selbst einstellen? (Antwort vom Cache erhalten, den Etag-Wert lesen und im Anforderungsheader einstellen)?

Antwort

1

Ich lief in das gleiche Problem mit diesem. Für mich verwendete ich die Standard-Cache-Richtlinie (NSURLRequestUseProtocolCachePolicy) und setzte automatisch das Kopfzeilenfeld "if-none-match", nach dem der Server suchen würde. Durch das Festlegen der Cache-Richtlinie als "NSURLRequestReloadIgnoringLocalCacheData" wurde jedoch offensichtlich das Header-Feld entfernt.

Haben Sie die anderen Cache-Richtlinienwerte versucht, um zu sehen, ob sie diesen Header für Sie hinzufügen? http://nshipster.com/nsurlcache/

bearbeiten: ich eine andere Frage Stack-Überlauf festgestellt, dass, was ich gesagt bestätigt oben:

Eine große Blog auf diesen unterschiedlichen Werten Cache-Richtlinie kann hier gesehen werden NSURLCache and ETags

0

Auch die Symbole sehen in Xcode (Rechtsklick auf das Symbol und "Zur Definition springen"). Es gibt einige, die nach den Kommentaren der Datei vorhanden, aber nicht implementiert sind!