Pourquoi utiliser deflate au lieu de gzip pour les fichiers texte servis par Apache ?
La réponse est simple Ne le fais pas. .
RFC 2616 définit deflate comme :
deflate Le format "zlib" défini dans la RFC 1950 en combinaison avec le mécanisme de compression "deflate" décrit dans la RFC 1951.
Le format zlib est défini dans RFC 1950 comme :
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
Donc, quelques en-têtes et une somme de contrôle ADLER32.
La RFC 2616 définit gzip comme :
gzip Un format d'encodage produit par le programme de compression de fichiers "gzip" (GNU zip) tel que décrit dans la RFC 1952 [25]. Ce format est un codage Lempel-Ziv (LZ77) avec un CRC de 32 bits.
RFC 1952 définit les données compressées comme :
Le format utilise actuellement la méthode de compression DEFLATE mais peut facilement être étendu pour utiliser d'autres méthodes de compression.
Le CRC-32 est plus lent que ADLER32
Par rapport à un contrôle de redondance cyclique de même longueur, il troque la fiabilité contre la vitesse (en préférant cette dernière).
Donc ... nous avons 2 mécanismes de compression qui utilisent le système de la même pour la compression, mais un différents pour les en-têtes et la somme de contrôle.
Maintenant, les paquets TCP sous-jacents sont déjà assez fiable donc la question ici n'est pas Adler 32 vs. CRC-32 que GZIP utilise.
Il s'avère que de nombreux navigateurs ont implémenté un algorithme deflate incorrect au fil des ans. Au lieu d'attendre l'en-tête zlib de la RFC 1950, ils attendaient simplement la charge utile compressée. De même, plusieurs serveurs web ont fait la même erreur.
Ainsi, au fil des ans, les navigateurs ont commencé à mettre en place une logique floue La mise en œuvre de deflate, ils essaient pour zlib header et adler checksum, si cela échoue ils essaient pour payload.
Le résultat d'une telle logique complexe est qu'elle est souvent brisée. Verve Studio dispose d'un test réalisé par l'utilisateur qui montrent à quel point la situation est mauvaise.
Par exemple : deflate fonctionne dans Safari 4.0 mais est cassé dans Safari 5.1, il a aussi toujours des problèmes sur IE.
Donc, la meilleure chose à faire est d'éviter complètement le deflate, le petit gain de vitesse (dû à l'adler 32) ne vaut pas le risque de casser les charges utiles.
0 votes
Réponses commutées acceptées... le consensus actuel est de deux contre un en faveur de gzip
1 votes
Mod_deflate est pour Apache 2, mod_gzip est pour Apache 1.3.