Ya los grandes como Google o Yahoo están utilizando esta capacidad para mejorar el rendimiento de sus sitios. Ahora, ¿Por qué los servidores web (Apache, tomcat, Jboss, etc) no tienen esa opción habilitada por omisión? La razón es que los browsers antiguos contenían errores y soporte muy precario para el contenido comprimido.
Yendo al grano. ¿Cómo habilitar la compresión?
Tomcat / JBoss:
- Abrir el archivo server.xml, localizar los conectores:
<connector port="8080" maxhttpheadersize="8192" maxthreads="150" minsparethreads="25" maxsparethreads="75" enablelookups="false" redirectport="8443" acceptcount="100" connectiontimeout="20000" disableuploadtimeout="true" emptysessionpath="true" >
- Agregar los siguientes atributos:
compression = "on"
compressableMimeType = "text/html,text/css,text/javascript,text/xml"
Estos atributos le dicen al tomcat que comprima todo el contenido de los tipos especificados.
Se deben colocar en todos los conectores, para así habilitar la compresión para SSL y las conexiones que vienen a través de un servidor Apache o IIS.
Si estamos sirviendo contenido para internet, lo más probable es que tengamos un Apache que sirve el contenido estático y le pase a tomcat/jboss el control para procesar el contenido dinámico. En este caso debemos también configurar Apache para que sirva el contenido estático comprimido.
Otra de las razones por las que no se habilita por omisión la compresión, es por el impacto en rendimiento que puede causar en los servidores. Con los servidores que hay ahorita pienso que es seguro habilitarla. Sin embargo, no está demás considerarlo y hacer las pruebas respectivas. Existe la manera de utilizar contenido precomprimido, pero eso aún no lo he investigado. Cuando lo tenga claro escribo otro post.
Si se tiene sólo al tomcat/jboss atendiendo las peticiones, recomiendo habilitar las librerías nativas APR. Las instrucciones están en otro post (Librerías nativas Tomcat 5.5 y 6.0).
Apache:
Hay dos formas equivalentes, o se crean archivos .htaccess o se edita el archivo httpd.conf, /etc/apache2/default-server.conf o sus equivalentes. Pero el contenido que se coloca es el mismo:
# compress all text & html:
AddOutputFilterByType DEFLATE text/html text/css text/xml text/javascript application/xhtml+xml application/x-javascript text/x-js
Esto se pone tal cual en los .htaccess y dentro de los tags <Directory> en los otros archivos como el httpd.conf o el /etc/apache2/default-server.conf. Esta instrucción le dice al servidor que todos los tipos de archivo ahí especificados los mande comprimidos. Ejemplo:
<Directory "/srv/www/htdocs">
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs-2.2/mod/core.html#options
# for more information.
Options All
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
AllowOverride None
# Controls who can get stuff from this server.
Order allow,deny
Allow from all
AddOutputFilterByType DEFLATE text/html text/css text/xml text/javascript application/xhtml+xml application/x-javascript text/x-js
</Directory>
Hay que asegurarse que el módulo mod_deflate está instalado. Eso en Linux se verifica en la variable de /etc/sysconfig/apache2 APACHE_MODULES. Ejemplo:
APACHE_MODULES="unique_id ... mod_jk jk mod_deflate"¿Alguna pregunta? Bienvenida
Hasta la próxima...
Nota: Si esta información te es de utilidad o piensas que se puede mejorar, por favor deja un comentario con tus observaciones.