Чем deflate отличается от gzip?

Рейтинг: 4Ответов: 1Опубликовано: 29.09.2014

Подскажите, чем deflate отличается от gzip? И можно ли включить сжатие gzip и deflate одновременно на сайте? И нужно ли?

Ответы

▲ 4

Deflate - алгоритм сжатия без потерь. Этот алгоритм считается свободным от всех существующих патентов и реализован во множестве open-source библиотек. ZLib является наиболее известной и используемой библиотекой, со стандартной реализацией этого алгоритма. Эта библиотека предоставляет как функции сжатия и распаковки данных, так и формат данных, называемый аналогично - zlib.

Формат zlib довольно простой и состоит из 3-х частей:

  • заголовок (2 байта 0x78, 0x9c);
  • данные, сжатые алгоритмом deflate;
  • контрольная сумма (4 байта, adler32).

GZip - утилита и формат сжатия данных алгоритмом deflate. Формат gzip несколько сложнее:

  • заголовок (10 байт, первые 2: 0x1f, 0x8b);
  • данные, сжатые алгоритмом deflate;
  • контрольная сумма (4 байта, crc32);
  • размер несжатых данных (4 байта).

Далее, при описании заголовка Content-Encoding в HTTP 1.1 было сказано, что:

  • Content-Encoding: gzip - данные в gzip формате;
  • Content-Encoding: deflate - данные в zlib формате.

И вот тут вышла путаница и ранние реализации веб сервера Microsoft IIS на запрос клиента Accept-Encoding: deflate отдавали данные в сыром виде (raw): голый deflate без каких-либо заголовков, а не zlib формат (с заголовком и контрольной суммой). И браузерам пришлось учиться угадывать, в каком же именно формате пришли данные, zlib или raw deflate.

Если бы не эта путаница, то скорее всего, deflate (который zlib), был бы предпочтительнее, т.к. он имеет меньший оверхед на размер заголовков (gzip на 12 байт больше) и более быстрый алгоритм контрольной суммы, но из-за путаницы, лучше ограничиться только gzip форматом. Ну а если решите включить и deflate, то убедитесь, что ваш сервер отдаёт данные в zlib формате.


Why are major web sites using gzip? (Почему основные веб-сайты используют gzip?).