NSURLConnection, NSURLRequest und remote-caching
Ich habe da ein kleines problem mit Anfrage Zwischenspeicherung unter Verwendung von NSURLConnection asynchrone verbindungen auf dem iPhone. Ich weiß nicht, ob ich etwas falsch verstanden, oder wenn Kakao ist genau das Gegenteil zu dem, was es tun soll...
In der Dokumentation für NSURLRequest sagt, dass:
NSURLRequestReloadIgnoringLocalCachedata
Gibt an, dass die Daten von der URL laden, die geladen werden soll, aus der ursprünglichen Quelle. Nicht vorhandene cache-Daten verwendet werden sollten, die zur Erfüllung einer URL laden Anfrage.
und:
NSURLRequestReloadIgnoringLocalAndremotecachedata
Gibt an, dass es nicht nur die lokalen cache-Daten werden ignoriert, aber, dass proxies und andere Zwischenprodukte sollten angewiesen werden, zu ignorieren Ihre caches so weit, wie es das Protokoll erlaubt.
Nun, wenn ich eine E-NSURLRequest mit NSURLRequestReloadIgnoringLocalCachedata (die angeblich zu ignorieren lokalen cache, aber die Verwendung von remote-cache, wenn verfügbar), den Header, die gesendet werden, sind:
GET /dashboard HTTP/1.1 User-Agent: XBlip1.0 CFNetwork/422.15.2 Darwin/9.6.0 (i386) (iMac8%2C1) X-Blip-Api: 0.02 Akzeptieren: application/json Authorization: Basic (...) Accept-Language: en-us Accept-Encoding: gzip, deflate Connection: keep-alive Host: api.blip.pl
Wird und der status 200 OK. Aber wenn ich NSURLRequestReloadIgnoringLocalAndremotecachedata, die angeblich zu ignorieren, die sowohl lokale als auch remote-caches, wie der name schon sagt, eine zusätzliche header Hinzugefügt wird:
If-None-Match: "d751713988987e9331980363e24189ce"
Und die Antwort " 304 not Modified. Ich habe die HTTP-RFC, und für "If-None-Match", heißt es, dass:
Wenn einer der entity-tags entsprechen den entity-tag der Einheit gewesen wäre, wieder in der Antwort auf eine ähnliche Anfrage BEKOMMEN (ohne If-None-Match-header) auf diese Ressource, (...) dann MUSS der server NICHT ausführen die angeforderte Methode (...) Statt, wenn die Anfrage war die Methode GET oder HEAD ist, SOLLTE der server antwortet mit einem 304 (Nicht Geändert) Antwort
Scheint es So, dass wenn ich NSURLRequestReloadIgnoringLocalAndremotecachedata, statt ignorieren der remote-cache, Kakao erzählt die remote-server explizit, dass es sollte Verwendung von remote-cache, und wenn ich NSURLRequestReloadIgnoringLocalCachedata, es nicht hinzuzufügen, dass line-und in-Effekt der remote-cache wird nicht verwendet.
Also, was genau ist hier passiert? Hab ich was verpasst, oder ist Kakao Einstellung eine falsche header?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Dokumentation:
Vom NSURLRequest.h (10.5 SDK)
Den Unterschied bemerken: Implementierte
Zeit für bug-reporting...
Indem die NSURLRequestReloadIgnoringLocalAndremotecachedata parameter weisen Sie den lokalen cache und den proxy-Server kann die Anfrage verarbeiten soll zwischen Ihrem client und dem Ziel-server, dass Sie nicht wieder Ihre eigene version der response-Daten. Ich denke, der Schlüssel-Komponente ist hier, dass die RemoteCache ist wahrscheinlich ein proxy und Sie sind einfach der Identifizierung, dass der Antrag soll erreichen Sie immer die richtigen server und nicht eine weitergeleitete Kopie.
Hinzufügen der "blöd-langen Namen" Parameters, den Sie folgern, dass Ihre Anwendung bereits eine frühere Kopie der Anfrage und so ist nur daran interessiert ist eigentlich das empfangen von Daten vom server, wenn Sie sich geändert hat, das ist, warum Sie immer eine Antwort "304 not Modified" vom server.
Dieses Verhalten scheint counter-intuitive, wie Sie ausdrücklich dazu beauftragt der Kunde nicht seinen eigenen cache, was impliziert, dass Sie möchten, zu verwerfen, alles, was dort und sicherlich nicht verwenden Sie es als Referenz für alle nachfolgenden Anfragen. Ich glaube, dass die erweiterte cache-Parameter bereitgestellt, die dem Entwickler erlauben, mit seinen eigenen caching-Ebene, dh. benachrichtigt werden, wenn Daten nicht auf dem server aktualisiert wurden, so dass Sie vermeiden können, unnötig neu zu Bearbeiten.
Hinweis: die "proxies und andere Zwischenprodukte" Teil. Sie sind nur zu vermeiden-caches nicht, der sich auf dem ursprünglichen server. Der original-server kann noch zurück, 304.