Cómo funciona la compresión GZIP / Deflate

  • Por
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.
En el anterior artículo mostramos algunos detalles interesantes sobre la compresión GZIP, sobre cómo funciona y cuáles son las ventajas de este modo de optimización de las páginas web. Ahora vamos a continuar con la segunda entrega del Manual de Compresión GZIP, explicando cómo funciona en la práctica este sistema.

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:

  1. El cliente web (navegador) solicita una página
  2. El servidor recibe la comunicación, comprueba si existe el archivo solicitado
  3. El servidor envía el archivo
  4. 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.

Nota: Para examinar las cabeceras del HTTP, de modo que cualquier persona pueda buscar las variables donde se envía notificación sobre la compresión o no de los archivos, podemos utilizar alguna herramienta como HTTP Live Headers.
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.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Manolo

10/5/2013
No es tan fácil hacer la compresión
Hola,

Llevo intentando tiempo hacer esto que explicas que parece tan fácil y no es nada fácil, hablando con los del soporte y con los desarrolladores.
Hablado con 1&1 y ARSYS, dos de las más importantes, me dicen lo mismo:

El módulo de Apache mod_deflate (necesario para la compresión de la web, no está disponible en ninguno de los Packs o Planes de los hosting normales, por lo que es necesario un servicio en el que tengas acceso como administrador del servidor (root) para que puedas instalar dicho módulo, y este es el caso de los servidores Dedicados, Virtuales y Cloud.

Me están diciendo que ellos no me garantizan la migración, que tengo que tener una persona contratada para que me haga esa migración y para que me de soporte después a esos servidores dedicados que no es lo mismo que un hosting normal, que si se cae ellos se ocupan, pero un servidor dedicado es mi responsabilidad completamente. Me las voy a ver negras como pase cualquier cosa en ese servidor un fin de semana o una noche y no tenga quien me haga copias de seguridad, me levante el servidor etc, etc...

Si eres una empresa con un soporte mayor y si contratas a alguien para que te de el soporte (te va a costar un ojo de la cara) entonces no hay problema.

No es nada fácil hacer esto de la compresión cuando te pones a ello.

Gracias
Un saludo
Manolo

Jesús Perales

14/9/2015
Gziped sencillo
(En respuesta al comentario de arriba).Así es cuando tienes un hosting en algunas de esas empresas, pero puedes crearte una cuenta en cloudfare y ellos te ofrecen gziped entre otras cosas para tu web, yo tengo un dominio en namecheap y el hosting es openshift.

Saludos.