Mengapa menggunakan deflate alih-alih gzip untuk file teks yang dilayani oleh Apache?
Jawaban sederhananya adalah jangan .
RFC 2616 mendefinisikan deflate sebagai:
deflate Format "zlib" yang didefinisikan dalam RFC 1950 dalam kombinasi dengan mekanisme kompresi "deflate" yang dijelaskan dalam RFC 1951
Format zlib didefinisikan dalam RFC 1950 sebagai:
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
Jadi, beberapa header dan sebuah checksum ADLER32
RFC 2616 mendefinisikan gzip sebagai:
gzip Format penyandian yang dihasilkan oleh program kompresi file "gzip" (GNU zip) seperti yang dijelaskan dalam RFC 1952 [25]. Format ini adalah coding Lempel-Ziv (LZ77) dengan CRC 32 bit.
RFC 1952 mendefinisikan data terkompresi sebagai:
Format saat ini menggunakan metode kompresi DEFLATE tetapi dapat dengan mudah diperluas untuk menggunakan metode kompresi lainnya.
CRC-32 lebih lambat dari ADLER32
Dibandingkan dengan pemeriksaan redundansi siklik dengan panjang yang sama, ini memperdagangkan keandalan untuk kecepatan (lebih memilih yang terakhir).
Jadi ... kami memiliki 2 mekanisme kompresi yang menggunakan algoritma yang sama untuk kompresi, tetapi algoritma yang berbeda untuk header dan checksum.
Sekarang, paket TCP yang mendasarinya sudah cukup andal , jadi masalahnya di sini bukan Adler 32 vs CRC-32 yang digunakan GZIP.
Ternyata banyak browser selama bertahun-tahun menerapkan algoritma deflate yang salah. Alih-alih mengharapkan header zlib di RFC 1950 mereka hanya mengharapkan payload terkompresi. Demikian pula berbagai server web membuat kesalahan yang sama.
Jadi, selama bertahun-tahun browser mulai menerapkan implementasi fuzzy logic deflate, mereka mencoba zlib header dan adler checksum, jika gagal mereka mencoba payload.
Hasil dari memiliki logika yang kompleks seperti itu adalah sering rusak. Verve Studio memiliki bagian uji kontribusi pengguna yang menunjukkan seberapa buruk situasinya.
Sebagai contoh: deflate bekerja di Safari 4.0 tetapi rusak di Safari 5.1, ia juga selalu memiliki masalah pada IE.
Jadi, hal terbaik yang harus dilakukan adalah menghindari mengempis sama sekali, dorongan kecepatan minor (karena adler 32) tidak sebanding dengan risiko rusaknya muatan.