Почему реальные серверы предпочитают кодирование gzip, а не дефлятирование?
-
22-08-2019 - |
Вопрос
Мы уже знаем кодирование 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 тоже:
- не поддерживать дефляцию на лету:mod_deflate Apache (сюрприз), GWS
- или предпочитаете отправить 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 необходимо использовать внешнюю библиотеку.