web-dev-qa-db-ja.com

NSURLConnection / NSURLRequest gzipサポート

NSURLConnection/NSURLRequestがgzipリクエストをサポートしているかどうかは誰かが知っていますか?.

もしそうなら、あなたはより多くの情報を提供できますか?

36
mxg

文書化されていないようです証拠がありますNSURLConnectionが行う透明なgzipサポートがあります。つまり、サーバーがgzipエンコーディングをサポートし、リクエストにAccept-Encodingヘッダーにgzip *が含まれている場合、サーバーはgzip圧縮された応答を送信し、NSURLConnectionが自動的にデコードします。

* NSURLRequestはデフォルトでそのヘッダーを追加する場合があります。そうでない場合は、次のように手動で追加する必要があります。

 [urlReq setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]
65
ax.

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);
3
liuyuning