2010-04-21 15 views
34

Qualcuno sa se NSURLConnection/NSURLRequest hanno il supporto per le richieste gzip.NSURLConnection/NSURLRequest supporto gzip

In caso affermativo, puoi fornire ulteriori informazioni?

+0

Possibile duplicato del [Accept-Encoding: gzip su iOS] (http://stackoverflow.com/questions/25333857/accept-encoding-gzip-on-ios) –

+0

@JoshCaswell, si prega di controllare la differenza di data . È stato chiesto 5 anni dopo che questa domanda è stata pubblicata. – mxg

+0

[I duplicati non devono sempre puntare nella direzione della data successiva] (http://meta.stackexchange.com/a/147651/159251). Credo che la risposta all'altra domanda sia un po 'più utile di quelle trovate qui. –

risposta

63

sebbene does not seem to be documented, there is evidence che NSURLConnectionfa hanno il supporto gzip trasparente. il che significa che se il server supporta la codifica gzip e la tua richiesta ha un'intestazione Accept-Encoding contenente gzip *, il server invierà una risposta gzip, che verrà decodificata automaticamente da NSURLConnection.

* NSURLRequest potrebbe aggiungere quell'intestazione per impostazione predefinita. in caso contrario, si deve aggiungere manualmente in questo modo:

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

1. Penso che sia necessario un NSMutableURLRequest per aggiungere un'intestazione 2. come "iOS 3.2" come sdk di base, l'intestazione accept-encoding che contiene deflate e gzip sembra essere inclusa automaticamente (apparentemente non era abituata a essere). – hop

+6

Ho appena eseguito anche i test e ho visto che iPhone aggiunge gzip e deflate di default. Qualcuno sa se è sempre stato supportato o da quale versione Apple ha iniziato ad includere Accept-Encoding di default? – Dmitry

+3

E le richieste di codifica gzip inviate al server? http://stackoverflow.com/questions/6204066/how-to-gzip-an-nsurlconnection-request – ma11hew28

2

NSURLRequest decodifica gzip per NSData; come la risposta del server contiene "Content-Encoding" = gzip; il NSData verrà decodificato. Se vuoi decodificarlo automaticamente, fai dopo. L'utilizzo dell'API privata non può essere applicato all'app store.

//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

Ho inoltrato una richiesta a bugreport.apple.com che questa o una API equivalente sia resa pubblica. http://openradar.appspot.com/radar?id=4931101243998208 – John