it-swarm.com.ru

Почему реальные серверы предпочитают gzip вместо deflate?

Мы уже знаем кодировка deflate - победитель over gzip относительно скорости кодирования, декодирования и размера сжатия.

Так почему же крупные сайты (которые я могу найти) не отправляют его (когда я использую браузер, который его принимает)?

утверждает Yahoo deflate является "менее эффективным". Зачем?

Я поддерживаю программное обеспечение HTTP-сервера, которое предпочитает дефляцию, поэтому я хотел бы знать, есть ли действительно веская причина, чтобы не продолжать это делать.

61
Steve Clay

Существует некоторая путаница в именах между спецификациями и HTTP:

  • DEFLATE в соответствии с определением RFC 1951 является форматом сжатых данных ,.
  • ZLIB в соответствии с определением RFC 195 является форматом сжатых данных который использует формат данных DEFLATE.
  • GZIP в соответствии с определением RFC 1952 это формат файла , который использует DEFLATE сжатый формат данных.

Но HTTP использует другое наименование :

  • gzip Формат кодирования, создаваемый программой сжатия файлов "gzip" (GNU Zip), как описано в RFC 1952 [25]. Этот формат представляет собой кодирование Лемпеля-Зива (LZ77) с 32-битным CRC.

  • deflate Формат "zlib", определенный в RFC 1950 [31] в сочетании с механизмом сжатия "deflate", описанным в RFC 1951 [29].

Итак, подведем итог:

  • gzip - это формат файла GZIP.
  • deflate на самом деле является ZLIB форматом данных. (Но некоторые клиенты также принимают фактический DEFLATE формат данных для deflate.)

Смотрите также этот ответ на вопрос В чем разница между кодировками HTTP 1.1 и "deflate"? :

В чем разница между "gzip" и "deflate" кодировками HTTP 1.1?

"gzip" - это формат gzip, а "deflate" - это формат zlib. Вероятно, им следовало бы называть второй "zlib", чтобы избежать путаницы с форматом необработанных сжатых данных. В то время как HTTP 1.1 RFC 2616 правильно указывает на спецификацию zlib в RFC 1950 для кодирования передачи "deflate", были сообщения о серверах и браузерах, которые некорректно генерируют или ожидают необработанные данные deflate в соответствии со спецификацией deflate в RFC 1951, особенно Microsoft , Таким образом, даже несмотря на то, что кодирование передачи "deflate" с использованием формата zlib было бы более эффективным подходом (и фактически именно для этого был разработан формат zlib), использование кодировки передачи "gzip", вероятно, более надежно из-за неудачного выбора имя со стороны авторов HTTP 1.1.

71
Gumbo

Из моего минимального тестирования видно, что большинство HTTPds тоже:

  1. не поддерживают дефляцию на лету: Apache mod_deflate (сюрприз), GWS
  2. или предпочитаете посылать gzip: IIS, mod_compress lighttpd

Поэтому для отправки deflate на самый популярный сервер (Apache) вы должны поддерживать предварительно закодированные файлы и использовать mod_negotiate (вам может даже понадобиться использовать карты типов, чтобы предпочитать deflate).

Я предполагаю, что из-за этой проблемы deflate используется редко, и поэтому ошибки более вероятно существуют в поддержке deflate клиента, чем в поддержке gzip.

9
Steve Clay

Посетите этот сайт для получения дополнительной информации: http://web.archive.org/web/20120321182910/http://www.vervestudios.co/projects/compression-tests


Deflate, согласно спецификации, на самом деле zlib (формат сжатия, разработанный специально для потоковой передачи контента через Интернет) ... который является оберткой для deflate.

Internet Explorer, однако, неправильно реализует дефлат HTTP 1.1 (zlib) как сырой дефлат. Поэтому, если ваш сервер отправляет правильное содержимое HTTP 1.1 deflate (zlib) в IE, он засорится.

Я немного исследовал эту тему, и кажется безопасным ВСЕГДА отправлять raw deflate в современные браузеры ... просто убедитесь, что он действительно raw , а не zlib.

Проверьте эту статью для получения дополнительной информации> Gzip vs Deflate (zlib) revisited .

Поэтому я думаю, что есть веская причина для продолжения отправки deflate через gzip.

7
David Murdoch

Насколько я знаю (отказ от ответственности: и я здесь не эксперт, только то, что я слышал), gzip использует тот же алгоритм, что и deflate, но у него больше заголовков, что делает его более крупным (по сравнению с deflate) , Тем не менее, я думаю, что deflate поддерживается меньшим количеством клиентов и прокси.

6
Mehrdad Afshari

Я удивлялся тому же самому :). Я думаю, что это может быть связано с совместимостью старых (возможно, древних) браузеров. Я где-то читал, что старые браузеры с большей вероятностью выползают при дефлированном контенте, который mod_gzipped в определенных случаях (?), Но поиск в Google привел меня к выводу, что, вероятно, лучше прекратить гуглить его.

1
karim79

ActionScript 3 имеет встроенную поддержку deflate, но для gzip вам нужно использовать внешнюю библиотеку

0
Alexander Farber