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

StackOverflow https://stackoverflow.com/questions/883841

Вопрос

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

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

Yahoo утверждает дефляция «менее эффективна».Почему?

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

Это было полезно?

Решение

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

  • СДУТЬ как определено РФК 1951 это формат сжатых данных.
  • ЗЛИБ как определено РФК 1950 это формат сжатых данных который использует СДУТЬ формат данных.
  • GZIP как определено РФК 1952 г. это формат файла который использует СДУТЬ сжатый формат данных.

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

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

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

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

  • gzip это GZIP формат файла.
  • deflate на самом деле это ЗЛИБ формат данных.(Но некоторые клиенты также принимают фактическую СДУТЬ формат данных для deflate.)

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

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

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

Другие советы

Судя по моему минимальному тестированию, большинство HTTPds тоже:

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

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

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

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


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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top