2010-04-21 2 views
34

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

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

+0

Возможный дубликат [Accept-Encoding: GZIP на прошивке] (http://stackoverflow.com/questions/25333857/accept-encoding-gzip-on-ios) –

+0

@JoshCaswell, пожалуйста, проверьте разницу даты , Его просили через 5 лет после публикации этого вопроса. – mxg

+0

[Дубликаты не всегда должны указывать в сторону более поздней даты] (http://meta.stackexchange.com/a/147651/159251). Я считаю, что ответ на другой вопрос немного полезнее, чем те, которые были найдены здесь. –

ответ

63

хотя does not seem to be documented, there is evidence что NSURLConnectionделает имеет прозрачную поддержку GZIP. что если сервер поддерживает кодировку gzip, а ваш запрос содержит заголовок Accept-Encoding, содержащий gzip *, сервер отправит ответ gzipped, который NSURLConnection будет автоматически декодироваться.

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

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

1. Я думаю, что вам нужно NSMutableURLRequest, чтобы добавить заголовок 2. Как «iOS 3.2» в качестве базового sdk, заголовок accept-encoding, содержащий deflate и gzip, кажется, включен автоматически (видимо, не использовался). – hop

+6

Я только что закончил тесты и увидел, что iPhone добавляет gzip и дефлирует по умолчанию. Кто-нибудь знает, поддерживалась ли она всегда или с какой версии Apple по умолчанию включала Accept-Encoding? – Dmitry

+3

Как насчет запросов на кодирование gzip, отправленных на сервер? http://stackoverflow.com/questions/6204066/how-to-gzip-an-nsurlconnection-request – ma11hew28

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); 
+0

Я подал запрос на bugreport.apple.com, чтобы этот или эквивалентный API был опубликован. http://openradar.appspot.com/radar?id=4931101243998208 – John