Desactivar antivirus para que deje pasar los GZIP

Supervisando el tamaño comprimido de los recursos web

Aparentemente no hay gzip

Conseguir optimizar nuestra web para que tenga una velocidad de carga aceptable es una gran paso. Pero además tenemos que hacer un seguimiento continuo porque hay muchas cosas que pueden fallar. Por ejemplo, nuevas versiones del servidor, PHP, navegadores o sistemas operativos pueden afectar negativamente a lo que hemos implementado en ese aspecto. En el tema sobre medir la velocidad de carga ya expuse varias herramientas que podemos usar para eso.

Implementé lo necesario para comprimir las páginas web y había venido revisando de vez en cuando el comportamiento usando la herramienta Developer Tools de Chrome con su pestaña Networks. Me llevé una inesperada sorpresa al ver que no aparecían valores en las celdas Content-Length y, especialmente, Content-Encoding de los recursos HTML y del JS general.js. Los tamaños incluyendo las cabeceras recibidas son de 32.3 KB para el HTML y 40.9 KB para el JS, tamaños que eran aproximadamente los de esos recursos originales sin comprimir. Deberían aparecer cantidades en torno a 10 KB para el HTML y no más de 14 KB para el JS. En general hay que procurar mantener los recursos por debajo de estos 14 KB para no incurrir en un coste adicional de RTT a causa de la latencia web. Por otro lado aparecía el campo Vary con su valor Accept-Encoding, en principio indicativo de que salieron comprimidos desde el servidor. ¿Qué estaba pasando?

Probé las que tenía en desarrollo en localhost y seguía pasando lo mismo. En la página de inicio del sitio en producción www.wextensible.com no se notaba una demora en la carga, por lo que de alguna forma podrían salir comprimidos desde el servidor y algo por el camino tenía que descomprimirlos. Para quitarme de dudas le pase el PageSpeed Insights para comprobar el comportamiento del servidor:

Comportamiento servidor con PageSpeed Insights

El comportamiento era el esperado. En la captura de pantalla he recortado dejando sólo los mensajes relacionados con la compresión y el tiempo de repuesta del servidor. Era evidente que al PageSpeed Insights le estaban llegando los recursos comprimidos, pero aparentemente no a mi navegador.

Buscando información encontré que los proxies, routers y en algún caso hasta los antivirus pueden interaccionar con la comunicación HTTP. Algunos sitios como Internautas.org pueden detectar si estamos detrás de un proxy, verificando que no era mi caso. En la configuración del router no encontré nada que hiciera pensar que estuviera modificando los contenidos. Así que pasé a examinar al antivirus.

Precisamente esta incidencia surgió tras cambiar mi viejo ordenador con Windows XP a uno nuevo con Windows 8.1, instalando una nueva versión del software antivirus para ese sistema operativo. Buscando la configuración avanzada del antivirus encontré una opción de filtrado de protocolos HTTP.

El antivirus filtra contenidos del protocolo HTTP

Filtrado protocolos en el antivirus

Por lo visto el antivirus estaba recibiendo el HTTP comprimido y tenía que descomprimirlo para revisar el contenido en busca de amenazas. Se lo estaba devolviendo al navegador ya descomprimido, vaciando las cabeceras Content-Encoding y Content-Length. En el cuadro de la derecha de la configuración podía agregar direcciones IP del servidor web que serían excluidas de ese filtrado. Puse la de este servidor en producción www.wextensible.com y, efectivamente, el resultado fue correcto.

Recursos con gzip

Los recursos se mantenían por debajo de los 14 KB y, por fin, pude tranquilizarme. Pensé en dejar la exclusión de la IP de este sitio en producción, pero al mismo tiempo podía ser un riesgo dado que es un alojamiento compartido y podría visitar otra página del alojamiento que no fuese segura. Así que eliminé esa IP y sólo puse las de mi servidor de desarrollo localhost:

IP excluidas

Tengo dadas de alta dos IP locales, la primera la uso para contenidos de desarrollo, mientras que la segunda es para verificar las páginas ya minimizadas (o minificadas), con imágenes optimizadas y, en definitiva, preparadas para subir al sitio en producción. Así antes de subirlas chequeo la pestaña Networks para comprobar que los recursos críticos no superan los 14 KB.