¿Por qué usar deflate en lugar de gzip para archivos de texto servidos por Apache?
La respuesta simple es no .
RFC 2616 define desinflar como:
desinflar El formato "zlib" definido en RFC 1950 en combinación con el mecanismo de compresión "desinflar" descrito en RFC 1951
El formato zlib se define en RFC 1950 como:
0 1
+---+---+
|CMF|FLG| (more-->)
+---+---+
0 1 2 3
+---+---+---+---+
| DICTID | (more-->)
+---+---+---+---+
+=====================+---+---+---+---+
|...compressed data...| ADLER32 |
+=====================+---+---+---+---+
Entonces, algunos encabezados y una suma de verificación ADLER32
RFC 2616 define gzip como:
gzip Un formato de codificación producido por el programa de compresión de archivos "gzip" (GNU zip) como se describe en RFC 1952 [25]. Este formato es una codificación Lempel-Ziv (LZ77) con un CRC de 32 bits.
RFC 1952 define los datos comprimidos como:
Actualmente, el formato usa el método de compresión DEFLATE, pero se puede extender fácilmente para usar otros métodos de compresión.
CRC-32 es más lento que ADLER32
En comparación con una verificación de redundancia cíclica de la misma longitud, cambia la fiabilidad por la velocidad (prefiriendo la última).
Entonces ... tenemos 2 mecanismos de compresión que usan el mismo algoritmo para la compresión, pero un algoritmo diferente para los encabezados y la suma de verificación.
Ahora, los paquetes TCP subyacentes ya son bastante confiables , por lo que el problema aquí no es Adler 32 vs CRC-32 que usa GZIP.
Resulta que muchos navegadores a lo largo de los años implementaron un algoritmo de desinflado incorrecto. En lugar de esperar el encabezado zlib en RFC 1950, simplemente esperaban la carga útil comprimida. Del mismo modo, varios servidores web cometieron el mismo error.
Entonces, a lo largo de los años, los navegadores comenzaron a implementar una implementación de desinflado de lógica difusa , intentan el encabezado zlib y la suma de comprobación de Adler, si eso falla, intentan la carga útil.
El resultado de tener una lógica compleja como esa es que a menudo se rompe. Verve Studio tiene una sección de prueba aportada por el usuario que muestra cuán grave es la situación.
Por ejemplo: deflate funciona en Safari 4.0 pero está roto en Safari 5.1, también siempre tiene problemas en IE.
Por lo tanto, lo mejor que puede hacer es evitar el desinflado por completo, el aumento de velocidad menor (debido a Adler 32) no vale el riesgo de cargas útiles rotas.