2010-04-21 30 views
34

NSURLConnection/NSURLRequest'in gzip istekleri için destek olup olmadığını bilen var mı?NSURLConnection/NSURLRequest gzip desteği

Daha fazla bilgi sağlayabilir misiniz?

+0

Olası yinelenen [Accept-Encoding: iOS'ta gzip] (http://stackoverflow.com/questions/25333857/accept-encoding-gzip-on-ios) –

+0

@JoshCaswell, tarih farkını kontrol ediniz . Bu sorunun yayınlanmasından 5 yıl sonra sorulmuştur. – mxg

+0

[Çoğaltmalar her zaman daha sonraki tarih yönünde işaret etmemelidir] (http://meta.stackexchange.com/a/147651/159251). Diğer sorudaki cevabın burada bulunanlardan biraz daha faydalı olduğuna inanıyorum. –

cevap

63

rağmen does not seem to be documented, şeffaf gzip desteği var there is evidenceNSURLConnection söyledi. sunucu gzip kodlamasını destekliyorsa ve isteğiniz gzip * içeren bir Accept-Encoding üstbilgisine sahipse, sunucu'un otomatik olarak kodunu çözeceği gzipli bir yanıt gönderecektir. Bu başlığı varsayılan olarak ekleyebilir. değilse, bunu böyle elle eklemek zorunda:

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

1. Ben bir başlık eklemek için bir NSMutableURLRequest gerek sanırım "sdk 3.2" olarak temel sdk olarak, kodlama ve gzip içeren kabul kodlama üstbilgisi otomatik olarak dahil görünüyor gibi görünüyor (görünüşte eskiden olduğu gibi). – hop

+6

Sadece testler yaptım ve iPhone'un gzip eklediğini ve varsayılan olarak deflate ettiğini gördüm. Her zaman desteklenip desteklenmediğini veya Apple'ın varsayılan olarak Accept-Encoding dahil hangi sürümü başlattığını biliyor mu? – Dmitry

+3

Sunucuya gönderilen gzip kodlaması istekleri nedir? http://stackoverflow.com/questions/6204066/how-to-gzip-an-nsurlconnection-request – ma11hew28

2

NSURLRequestNSData için gzip deşifre; Sunucu yanıtı gibi "Content-Encoding" = gzip; NSData kod çözecektir. Otomatik olarak kodunu çözmek isterseniz, sonraki işlemi yapın. Özel API kullanma, uygulama mağazasına uygulanamaz. arasında

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

Bugreport.apple.com adresinden bu ya da eşdeğer bir API'nin kamuya açıklanmasını istedim. http://openradar.appspot.com/radar?id=4931101243998208 – John