Поддержка NSURLConnection/NSURLRequest gzip
Кто-нибудь знает, поддерживает ли NSURLConnection/NSURLRequest запросы gzip.
Если да, можете ли вы предоставить дополнительную информацию?
Ответы
Ответ 1
хотя он похоже, не документирован, есть доказательства, что NSURLConnection
имеет прозрачную поддержку gzip. что если сервер поддерживает кодировку gzip, а ваш запрос имеет заголовок Accept-Encoding
, содержащий gzip
*, сервер отправит gzipped-ответ, который NSURLConnection
будет автоматически декодироваться.
* NSURLRequest
может добавить этот заголовок по умолчанию. если нет, вы должны добавить его вручную так:
[urlReq setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]
Ответ 2
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);