Para poder entender la compresión por GZIP, u otros métodos de comprimir como Deflate, tenemos que conocer un poco sobre las comunicaciones por HTTP, que es el protocolo que se utiliza para el acceso al web. Como sabemos, toda comunicación entre el cliente y servidor web responde a un mismo esquema, que es justamente ese protocolo, o modo de operar, definido para las comunicaciones entre clientes y servidores web.
De una manera muy esquemática, estos son los pasos que se realizan en una comunicación HTTP entre el servidor web y el navegador:
Para implementar este protocolo, en la práctica, los sistemas cliente y servidor se envían diversas informaciones de control, en las cabeceras HTTP de la solicitud y la respuesta. En las cabeceras del HTTP, tanto en la solicitud como en la respuesta, se aloja mucha información para control y especificación de las comunicaciones, aunque en realidad ahora sólo nos interesan los datos enviados para definir si hay o no compresión.
Cuando el cliente web solicita una página, en el paso 1), envía en las cabeceras del HTTP un código de control para decir si acepta o no envío de los archivos comprimidos y qué formatos permite.
En concreto el cliente que solicitó la página enviará una variable llamada "accept-encoding" que tendrá como valor los formatos de compresión que admite ese navegador. Actualmente todos los navegadores modernos aceptan compresión con GZIP y Deflate, por lo que en las cabeceras del HTTP de la solicitud tendremos el siguiente código de control:
Accept-Encoding: gzip,deflate
Eso quiere decir que el navegador acepta los formatos de compresión GZIP y Deflate. El servidor que recibe esa cabecera, podrá entonces enviar los archivos solicitados al cliente en formato comprimido, con la certeza de que el cliente los podrá procesar perfectamente. Sin embargo, dependiendo de cómo se configure el servidor, los archivos se podrán enviar comprimidos o no.
El servidor web también envía en las cabeceras de las comunicaciones HTTP una variable para informar si finalmente se comprimieron o no los archivos de respuesta y, en el caso de que se hayan comprimido, el formato con el que se codificaron.
Content-Encoding: gzip
En esa variable, el servidor web está indicando que la respuesta enviada está en formato comprimido con GZIP.
Existen diversas maneras de configurar nuestro sitio web para que las páginas se envíen comprimidas, así como otros archivos externos también. Nosotros vamos a hacer diversas prácticas en este sentido, comenzando con las explicaciones sobre cómo configurar el servidor para que las páginas PHP se envíen comprimidas.