Зачем использовать 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 * на 1039 * медленнее, чем 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) не стоит риска поломки полезных нагрузок.