2010-04-21 5 views
34

Weiß jemand, wenn NSURLConnection/NSURLRequest Unterstützung für Gzip-Anforderungen haben.NSURLConnection/NSURLRequest gzip Unterstützung

Wenn ja, können Sie weitere Informationen bereitstellen?

+0

Mögliche Duplikat [Accept-Encoding: gzip auf iOS] (http://stackoverflow.com/questions/25333857/accept-encoding-gzip-on-ios) –

+0

@JoshCaswell, überprüfen Sie bitte das Datum Unterschied . Es wurde 5 Jahre nach dieser Frage gefragt. – mxg

+0

[Duplikate müssen nicht immer in die Richtung des späteren Datums zeigen] (http://meta.stackexchange.com/a/147651/159251). Ich glaube, die Antwort auf die andere Frage ist ein bisschen nützlicher als die hier gefundenen. –

Antwort

63

obwohl es does not seem to be documented, there is evidence dass NSURLConnectiontut transparent gzip Unterstützung. Das heißt, wenn der Server die Kodierung von gzip unterstützt und Ihre Anfrage einen Accept-Encoding Header hat, der gzip * enthält, sendet der Server eine gezippte Antwort, die NSURLConnection automatisch dekodiert.

* NSURLRequest könnte diesen Header standardmäßig hinzufügen. wenn nicht, müssen Sie es manuell hinzufügen wie folgt:

[urlReq setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"] 
+8

1. Ich denke, Sie benötigen eine NSMutableURLRequest, um eine Kopfzeile 2. ab "iOS 3.2" als Basis-SDK, die Annahme-Codierung Header Deflate und Gzip zu enthalten scheint automatisch enthalten sein (anscheinend nicht zu sein). – hop

+6

Ich habe gerade Tests gemacht und gesehen, dass das iPhone standardmäßig gzip und deflate hinzufügt. Weiß jemand, ob es immer unterstützt wurde oder seit welcher Version Apple standardmäßig Accept-Encoding integriert hat? – Dmitry

+3

Was ist mit den gzip-Codierungsanforderungen, die an den Server gesendet werden? http://StackOverflow.com/questions/6204066/how-to-gzip-an-nsurlconnection-request – ma11hew28

2

NSURLRequest gzip NSData decodiert; wie die Serverantwort enthalten "Content-Encoding" = gzip; Die NSData wird dekodieren. Wenn Sie es automatisch dekodieren möchten, machen Sie als nächstes. Die Verwendung der privaten API kann nicht auf den App Store angewendet werden.

//import CFNetwork.framework 
extern CFStringRef kCFURLRequestDoNotDecodeData; 
typedef const struct _CFURLRequest* CFURLRequestRef; 
extern void _CFURLRequestSetProtocolProperty(CFURLRequestRef,CFStringRef,CFTypeRef); 

//NSURLRequest init ... 
//... 
CFURLRequestRef requestRef = (CFURLRequestRef)[request performSelector:@selector(_CFURLRequest)]; 
_CFURLRequestSetProtocolProperty(requestRef,kCFURLRequestDoNotDecodeData,kCFBooleanTrue); 
+0

Ich habe eine Anfrage bei bugreport.apple.com eingereicht, dass diese oder eine äquivalente API veröffentlicht wird. http://openradar.appspot.com/radar?id=4931101243998208 – John