Зачем использовать 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, они просто ожидали сжатую полезную нагрузку. Аналогичным образом различные веб-серверы допустили одну и ту же ошибку.
Таким образом, в течение многих лет браузеры начали реализовывать реализацию нечеткой логики с дефляцией, они пытаются использовать заголовок zlib и контрольную сумму adler, а в случае неудачи - полезную нагрузку.
Результатом такой сложной логики является то, что она часто нарушается. В Verve Studio есть пользовательский тестовый раздел, показывающий, насколько плоха ситуация.
Например: deflate работает в Safari 4.0, но не работает в Safari 5.1, он также всегда имеет проблемы с IE.
Таким образом, лучше всего избегать дефляции в целом, незначительное повышение скорости (из-за adler 32) не стоит риска поломки полезной нагрузки.