Por que usar deflate em vez de gzip para arquivos de texto servidos pelo Apache?
A resposta simples é não .
O RFC 2616 define deflate como:
deflate O formato "zlib" definido na RFC 1950 em combinação com o mecanismo de compactação "deflate" descrito na RFC 1951
O formato zlib é definido no RFC 1950 como:
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
Assim, alguns cabeçalhos e uma soma de verificação ADLER32
O RFC 2616 define o gzip como:
gzip Um formato de codificação produzido pelo programa de compactação de arquivos "gzip" (GNU zip), conforme descrito na RFC 1952 [25]. Este formato é uma codificação Lempel-Ziv (LZ77) com um CRC de 32 bits.
A RFC 1952 define os dados compactados como:
Atualmente, o formato usa o método DEFLATE de compactação, mas pode ser facilmente estendido para usar outros métodos de compactação.
CRC-32 é mais lento que ADLER32
Comparado a uma verificação de redundância cíclica do mesmo comprimento, troca confiabilidade por velocidade (preferindo o último).
Então ... nós temos 2 mecanismos de compactação que usam o mesmo algoritmo para compactação, mas um algoritmo diferente para cabeçalhos e soma de verificação.
Agora, os pacotes TCP subjacentes já são bastante confiáveis , portanto, o problema aqui não é o Adler 32 vs o CRC-32 que o GZIP usa.
Acontece que muitos navegadores ao longo dos anos implementaram um algoritmo de deflação incorreto. Em vez de esperar o cabeçalho zlib na RFC 1950, eles simplesmente esperavam a carga útil compactada. Da mesma forma, vários servidores web cometeram o mesmo erro.
Assim, ao longo dos anos, os navegadores começaram a implementar uma implementação de deflação de lógica fuzzy , eles tentaram o cabeçalho zlib e a soma de verificação do adler, se isso falhar, tentaram a carga útil.
O resultado de ter uma lógica complexa como essa é que ela geralmente é quebrada. O Verve Studio possui uma seção de teste com contribuição do usuário que mostra o quão ruim é a situação.
Por exemplo: deflate funciona no Safari 4.0, mas está quebrado no Safari 5.1, mas também sempre apresenta problemas no IE.
Portanto, a melhor coisa a fazer é evitar o esvaziamento completo, o pequeno aumento de velocidade (devido ao adler 32) não vale o risco de cargas úteis quebradas.