Perché usare deflate invece di gzip per i file di testo forniti da Apache?
La semplice risposta è no .
RFC 2616 definisce deflate come:
deflate Il formato "zlib" definito in RFC 1950 in combinazione con il meccanismo di compressione "deflate" descritto in RFC 1951
Il formato zlib è definito in RFC 1950 come:
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
Quindi, alcune intestazioni e un checksum ADLER32
RFC 2616 definisce gzip come:
gzip Un formato di codifica prodotto dal programma di compressione file "gzip" (GNU zip) come descritto in RFC 1952 [25]. Questo formato è un codice Lempel-Ziv (LZ77) con un CRC a 32 bit.
RFC 1952 definisce i dati compressi come:
Il formato attualmente utilizza il metodo di compressione DEFLATE ma può essere facilmente esteso per utilizzare altri metodi di compressione.
CRC-32 è più lento di ADLER32
Rispetto a una verifica di ridondanza ciclica della stessa lunghezza, scambia affidabilità e velocità (preferendo quest'ultima).
Quindi ... abbiamo 2 meccanismi di compressione che usano lo stesso algoritmo per la compressione, ma un algoritmo diverso per intestazioni e checksum.
Ora, i pacchetti TCP sottostanti sono già abbastanza affidabili , quindi il problema qui non è Adler 32 vs CRC-32 che utilizza GZIP.
Risulta che nel corso degli anni molti browser hanno implementato un algoritmo di deflazione errato. Invece di aspettarsi l'intestazione zlib in RFC 1950, si aspettavano semplicemente il carico utile compresso. Allo stesso modo vari server Web hanno commesso lo stesso errore.
Pertanto, nel corso degli anni i browser hanno iniziato a implementare un'implementazione deflate della logica fuzzy , provano per l'intestazione zlib e il checksum adler, se ciò fallisce provano per il payload.
Il risultato di avere una logica complessa come quella è che è spesso rotto. Verve Studio ha una sezione di test fornita dall'utente che mostra quanto sia grave la situazione.
Ad esempio: deflate funziona in Safari 4.0 ma è rotto in Safari 5.1, inoltre presenta sempre problemi su IE.
Quindi, la cosa migliore da fare è evitare di sgonfiare del tutto, l'aumento di velocità minore (dovuto all'adler 32) non vale il rischio di carichi utili interrotti.