La compresión de una web es un proceso transparente para el usuario, pero es bueno que conozcamos un poco sobre cómo se realiza internamente en las comunicaciones HTTP.
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:
- El cliente web (navegador) solicita una página
- El servidor recibe la comunicación, comprueba si existe el archivo solicitado
- El servidor envía el archivo
- El cliente lo muestra
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.
Para saber si un servidor web está enviando la respuesta comprimida, o no, podemos acceder a la FAQ: Cómo saber si una página está comprimida 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.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...