Поддержка NSURLConnection / NSURLRequest gzip - PullRequest
36 голосов
/ 21 апреля 2010

Кто-нибудь знает, поддерживает ли NSURLConnection / NSURLRequest запросы gzip.

Если да, можете ли вы предоставить больше информации?

Ответы [ 2 ]

65 голосов
/ 21 апреля 2010

, хотя , похоже, не задокументировано , есть доказательства , что NSURLConnection имеет поддержку прозрачного gzip Это означает, что если сервер поддерживает кодировку gzip, а ваш запрос имеет заголовок Accept-Encoding, содержащий gzip*, сервер отправит ответ gzipped, который NSURLConnection будет автоматически декодирован.

* NSURLRequest может добавить этот заголовок по умолчанию. если нет, вы должны добавить его вручную так:

 [urlReq setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]
3 голосов
/ 23 мая 2013

NSURLRequest декодирует gzip в NSData;например ответ сервера содержит "Content-Encoding" = gzip;NSData будет декодировать.Если вы не хотите автоматически его декодировать, добавьте код удара.Это частный API.

//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);
...