Почему реальные серверы предпочитают gzip вместо deflate? - PullRequest
61 голосов
/ 19 мая 2009

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

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

Yahoo утверждает, что deflate "менее эффективен". Почему?

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

Ответы [ 6 ]

71 голосов
/ 16 октября 2009

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

  • DEFLATE в соответствии с RFC 1951 - это формат сжатых данных .
  • ZLIB в соответствии с RFC 1950 представляет собой формат сжатых данных , использующий формат данных 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 "gzip" и "deflate"? :

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

"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.

9 голосов
/ 21 мая 2009

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

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

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

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

7 голосов
/ 16 октября 2009

Проверьте этот сайт для получения дополнительной информации: 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) вновь .

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

6 голосов
/ 19 мая 2009

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

1 голос
/ 19 мая 2009

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

0 голосов
/ 18 января 2010

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

...