Почему серверы реального мира предпочитают кодирование gzip для дефляции?
Мы уже знаем, что deflate encoding является победителем по сравнению с gzip относительно скорости кодирования, декодирования и размера сжатия.
Итак, почему нет больших сайтов (которые я могу найти) отправить его (когда я использую браузер, который его принимает)?
Yahoo утверждает, что deflate "менее эффективен" . Почему?
Я поддерживаю программное обеспечение HTTP-сервера, которое предпочитает deflate, поэтому я хотел бы знать, есть ли какая-то действительно хорошая причина не продолжать это делать.
Ответы
Ответ 1
Существует некоторая путаница в отношении именования между спецификациями и HTTP:
- DEFLATE, как определено RFC 1951 - это сжатый формат данных.
- ZLIB, как определено RFC 1950 - это сжатый формат данных, который использует формат данных DEFLATE.
- GZIP, как определено RFC 1952 - это формат , который использует сжатый формат данных DEFLATE.
Но 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 для deflate
.)
См. также этот ответ на вопрос. Какая разница между кодировками "gzip" и "deflate" HTTP 1.1?:
Какая разница между кодировками "gzip" и "deflate" HTTP 1.1?
"gzip" - это формат gzip, а "deflate" - это формат zlib. Вероятно, они, вероятно, назвали второй "zlib", чтобы избежать путаницы с сжатым форматом данных с дефлятом. Хотя HTTP 1.1 RFC 2616 правильно указывает на спецификацию zlib в RFC 1950 для "дефлятной" кодировки передачи, поступали сообщения о серверах и браузерах, которые неправильно генерируют или ожидают данные с дефлятной обработкой в расчете дефляции в RFC 1951, в первую очередь Microsoft, Таким образом, даже если кодирование передачи с дефляцией с использованием формата zlib будет более эффективным (и на самом деле именно тем, для чего был разработан формат zlib), использование кодирования передачи "gzip", вероятно, более надежное из-за неудачного выбора имя со стороны авторов HTTP 1.1.
Ответ 2
Из моего минимального тестирования это выглядит как большинство HTTPds:
- не поддерживают дефляцию "на лету": Apache mod_deflate (suprise), GWS
- или предпочитаем отправлять gzip: IIS, lighttpd mod_compress
Итак, чтобы отправить deflate на самый популярный сервер (Apache), вы должны поддерживать предварительно закодированные файлы и использовать mod_negotiate (возможно, вам даже придется использовать карты типов, чтобы предпочесть дефляцию).
Я бы предположил, из-за этой проблемы дефляция редко используется, и поэтому ошибки чаще всего существуют в поддержке сбрасывания клиентов, чем в поддержке gzip.
Ответ 3
Проверьте этот веб-сайт для получения дополнительной информации:
http://web.archive.org/web/20120321182910/http://www.vervestudios.co/projects/compression-tests
Deflate, per spec, фактически zlib (формат сжатия, разработанный специально для потоковой передачи контента через Интернет)... который является оберткой вокруг дефлята.
Internet Explorer, однако, неправильно использует HTTP 1.1 deflate (zlib) в качестве исходного дефлята. Поэтому, если ваш сервер отправляет корректный HTTP 1.1 deflate (zlib) контент в IE, он задыхается.
Я немного исследовал эту тему, и она выглядит безопасно ВСЕГДА посылать сырые дефлаты в современные браузеры... просто убедитесь, что это, по сути, raw, а не zlib.
Проверьте эту статью за дополнительной информацией > Пересмотренный Gzip vs Deflate (zlib).
Итак, я думаю, что есть веская причина, чтобы продолжить отправку дефлятора над gzip.
Ответ 4
Насколько я знаю (отказ от ответственности: и я не эксперт здесь, только то, что я слышал), gzip
использует тот же алгоритм, что и deflate
, но имеет больше заголовков, которые заставляют его иметь больший размер (относительно deflate
). Однако, я думаю, deflate
поддерживается меньшим количеством клиентов и прокси.
Ответ 5
Я тоже задавался вопросом:). Я думаю, что это может быть связано с совместимостью старых (возможно, древних) браузеров. Я где-то читал, что более старые браузеры, скорее всего, ползут в дефлированном контенте, который mod_gzipped в некоторых случаях (?), Но googling это привело меня к выводу, что, вероятно, лучше всего прекратить поиски в Интернете.
Ответ 6
ActionScript 3 имеет встроенную поддержку deflate, но для gzip вам нужно использовать внешнюю библиотеку