Accept-Encoding: gzip для iOS

Q1 С набором приложений для iOS, могу ли я ожидать, что Accept-Encoding: gzip будет использоваться автоматически, или мне нужно явно запросить его использование, установив это где-нибудь в запросе URL?

Я сейчас использую звонок [NSData dataWithContentsOfURL: url], хотя я, вероятно, перейду к специальной настройке NSURLSession - может ли это автоматически запрашивать кодировку gzip?

Q2 Кроме того, если он используется и сервер обязуется с содержимым gzip-ed, я прав, что клиентская сторона автоматически декодирует сжатый контент прозрачно, так что мне это не нужно?

1 ответ

Решение

Это все автоматически, хотя я не могу сразу найти авторитетную ссылку. Вы можете доказать это эмпирически, используя прокси.

Лучшее, что я могу найти: в примечаниях к выпуску iOS 7.1 попутно упоминается, что...

Поведение совместимости было добавлено для решения проблемы, когда некоторые веб-серверы отправляли неверное значение Content-Length для контента "Content-Encoding: gzip". Ранее NSURLConnection и NSURLSession отправляли сообщение об ошибке "сетевое соединение потеряно" / NSURLErrorNetworkConnectionLost (-1005) в этой ситуации.

Поведение совместимости применяется только в том случае, если значение Content-Length точно соответствует расширенному содержимому gzip. Он не будет применяться для "выкл на 1" или аналогичного неправильного учета.

т.е. NSURLConnection а также NSURLSession включите код для обработки содержимого gzip и определенно сделал это до 7.1 (согласно ссылке на "ранее"). Как ни странно, они, кажется, делали это с незапамятных времен, но в любом случае сейчас 7.0+ составляют около 98% рынка загрузки приложений.

Другие вопросы по тегам