Accept-Encoding: gzip на iOS

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

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

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


person Benjohn    schedule 15.08.2014    source источник


Ответы (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% рынка загрузки приложений.

person Tommy    schedule 15.08.2014
comment
ответ выше прочитайте Система загрузки URL - person Shams Ahmed; 16.08.2014
comment
Привет @tommy, спасибо - я немного отредактировал вопрос, чтобы было ясно, что вопрос состоит из двух частей. Я думаю, вы дали ответ на Q2, но не на Q1? - person Benjohn; 16.08.2014
comment
Я нашел подходящий источник для Q2, но ответ «да» на оба из опыта. Я продолжу охоту. - person Tommy; 16.08.2014
comment
Поскольку вы единственный, у кого есть конкретный ответ на эти вопросы, я спрошу вас еще один: будет ли это также происходить автоматически и для запросов на загрузку? Предположим, что мое тело POST-запроса представляет собой огромный уродливый JSON — могу ли я доверять NSURLSession, чтобы сдуть его перед отправкой? Должен ли я как-то сказать ему сделать это? использовать определенные дополнительные заголовки? как это сделать? - person Motti Shneor; 29.05.2019