Po co używać deflate zamiast gzip dla plików tekstowych obsługiwanych przez Apache?
Prosta odpowiedź brzmi : nie .
RFC 2616 definiuje deflację jako:
deflate Format „zlib” zdefiniowany w RFC 1950 w połączeniu z mechanizmem kompresji „deflate” opisanym w RFC 1951
Format zlib jest zdefiniowany w RFC 1950 jako:
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
Kilka nagłówków i suma kontrolna ADLER32
RFC 2616 definiuje gzip jako:
gzip Format kodowania stworzony przez program do kompresji plików „gzip” (GNU zip), jak opisano w RFC 1952 [25]. Ten format to kodowanie Lempel-Ziv (LZ77) z 32-bitowym CRC.
RFC 1952 definiuje skompresowane dane jako:
Format używa obecnie metody kompresji DEFLATE, ale można ją łatwo rozszerzyć, aby używała innych metod kompresji.
CRC-32 jest wolniejszy niż ADLER32
W porównaniu do cyklicznej kontroli redundancji o tej samej długości, zamienia niezawodność na szybkość (preferując tę drugą).
Więc ... mamy 2 mechanizmy kompresji, które używają tego samego algorytmu do kompresji, ale inny algorytm dla nagłówków i sumy kontrolnej.
Teraz bazowe pakiety TCP są już dość niezawodne , więc problemem nie jest Adler 32 vs. CRC-32, którego używa GZIP.
Okazuje się, że wiele przeglądarek na przestrzeni lat zastosowało nieprawidłowy algorytm deflacji. Zamiast oczekiwać nagłówka zlib w RFC 1950, po prostu oczekiwali skompresowanego ładunku. Podobnie różne serwery internetowe popełniły ten sam błąd.
Tak więc, z biegiem lat przeglądarki zaczęły implementować rozmytą implementację deflacji logicznej , próbują uzyskać nagłówek zlib i sumę kontrolną adlera, jeśli to się nie powiedzie, próbują załadować.
Rezultatem takiej złożonej logiki jest to, że często się psuje. Verve Studio ma sekcję testową napisaną przez użytkownika, która pokazuje, jak zła jest sytuacja.
Na przykład: deflate działa w Safari 4.0, ale jest uszkodzone w Safari 5.1, zawsze ma problemy z IE.
Najlepszym rozwiązaniem jest całkowite spuszczenie powietrza, niewielkie zwiększenie prędkości (z powodu Adlera 32) nie jest warte ryzyka zepsutych ładunków.