Warum sollten Sie deflate anstelle von gzip für Textdateien verwenden, die von Apache bereitgestellt werden?
Die einfache Antwort lautet nicht .
RFC 2616 definiert Deflate als:
deflate Das in RFC 1950 definierte "zlib" -Format in Kombination mit dem in RFC 1951 beschriebenen "deflate" -Komprimierungsmechanismus
Das zlib-Format ist in RFC 1950 wie folgt definiert :
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
Also ein paar Header und eine ADLER32-Prüfsumme
RFC 2616 definiert gzip als:
gzip Ein vom Dateikomprimierungsprogramm "gzip" (GNU zip) erstelltes Codierungsformat, wie in RFC 1952 [25] beschrieben. Dieses Format ist eine Lempel-Ziv-Codierung (LZ77) mit einer 32-Bit-CRC.
RFC 1952 definiert die komprimierten Daten als:
Das Format verwendet derzeit die DEFLATE-Komprimierungsmethode, kann jedoch problemlos auf andere Komprimierungsmethoden erweitert werden.
CRC-32 ist langsamer als ADLER32
Im Vergleich zu einer zyklischen Redundanzprüfung gleicher Länge wird Zuverlässigkeit gegen Geschwindigkeit getauscht (wobei letztere bevorzugt wird).
Also ... wir haben zwei Komprimierungsmechanismen, die denselben Algorithmus für die Komprimierung verwenden, aber einen anderen Algorithmus für Header und Prüfsumme.
Jetzt sind die zugrunde liegenden TCP-Pakete bereits ziemlich zuverlässig , daher ist das Problem hier nicht Adler 32 gegenüber CRC-32 , das GZIP verwendet.
Es stellte sich heraus, dass viele Browser im Laufe der Jahre einen falschen Deflate-Algorithmus implementiert haben. Anstatt den zlib-Header in RFC 1950 zu erwarten, erwarteten sie einfach die komprimierte Nutzlast. In ähnlicher Weise haben verschiedene Webserver den gleichen Fehler gemacht.
Im Laufe der Jahre haben Browser damit begonnen, eine Fuzzy-Logik- Deflate-Implementierung zu implementieren. Sie versuchen, die zlib-Header- und Adler-Prüfsumme zu ermitteln. Wenn dies fehlschlägt, versuchen sie, Nutzdaten zu erhalten.
Das Ergebnis einer solchen komplexen Logik ist, dass sie oft kaputt ist. Verve Studio hat einen vom Benutzer bereitgestellten Testabschnitt , der zeigt, wie schlimm die Situation ist.
Beispiel: Deflate funktioniert in Safari 4.0, ist jedoch in Safari 5.1 fehlerhaft. Außerdem treten im IE immer Probleme auf.
Das Beste, was Sie tun können, ist, das Entleeren insgesamt zu vermeiden. Die geringfügige Geschwindigkeitssteigerung (aufgrund von Adler 32) ist das Risiko von Nutzlastbrüchen nicht wert.