Зачем использовать deflate вместо gzip для текстовых файлов, обслуживаемых Apache?
Простой ответ: не надо.
RFC 2616 определяет deflate как:
deflate Формат «zlib», определенный в RFC 1950, в сочетании с механизмом сжатия «deflate», описанным в RFC 1951.
Формат zlib определен в RFC 1950 как:
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
Итак, несколько заголовков и контрольная сумма ADLER32.
RFC 2616 определяет gzip как:
gzip Формат кодирования, созданный программой сжатия файлов «gzip» (GNU zip), как описано в RFC 1952 [25]. Этот формат представляет собой кодировку Лемпеля-Зива (LZ77) с 32-битным CRC.
RFC 1952 определяет сжатые данные как:
В настоящее время формат использует метод сжатия DEFLATE, но его можно легко расширить для использования других методов сжатия.
CRC-32 медленнее, чем ADLER32
По сравнению с циклической проверкой избыточности такой же продолжительности, здесь надежность торгуется на скорость (предпочитая последнее).
Итак ... у нас есть 2 механизма сжатия, которые используют тот же алгоритм сжатия, но другой алгоритм для заголовков и контрольной суммы.
Теперь базовые TCP-пакеты уже довольно надежны, поэтому проблема здесь не в Adler 32. по сравнению с CRC-32, который использует GZIP.
Оказывается, многие браузеры за эти годы реализовали неправильный алгоритм дефлятирования. Вместо ожидания заголовка zlib в RFC 1950 они просто ожидали сжатой полезной нагрузки. Точно так же разные веб-серверы совершили ту же ошибку.
Итак, с годами браузеры начали реализовывать реализацию deflate нечеткой логики, они пробуют использовать заголовок zlib и контрольную сумму adler, если это не удается, они пробуют полезную нагрузку.
Результатом такой сложной логики является то, что она часто нарушается. В Verve Studio есть пользовательский тест, показывающий, насколько плоха ситуация.
Например: deflate работает в Safari 4.0, но не работает в Safari 5.1, у него также всегда есть проблемы с IE.
Итак, лучше всего вообще избегать дефляции, незначительное увеличение скорости (из-за Adler 32) не стоит риска поломки полезной нагрузки.
person
Sam Saffron
schedule
25.03.2012