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

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

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

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

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

6 ответов


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

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

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

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

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

подведем итог:

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

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

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

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


из моего минимального тестирования появляется большинство HTTPds либо:

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

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

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


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


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

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

Я немного исследовал тему, и кажется безопасным всегда отправлять raw выкачать в современных браузерах...просто убедитесь, что это, на самом деле,raw и не zlib.

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

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


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


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


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