En los entornos en los que contemos con un frontal Apache podemos implementar la compresión de contenido en ese propio frontal web tal y como comenté. Sin embargo en los casos en los que el usuario acceda directamente al servidor de aplicaciones, también podemos implementar compresión gzip del contenido para ahorrar ancho de banda en la red.
Jboss AS 6 y versiones inferiores
El fichero a modificar sería el conocido server.xml
que está en el componente Jboss Web. Dependiendo de la versión de Jboss este fichero cambia ligeramente de localización. Considerando que estuviéramos utilizando la instancia default
(para otras como all
la estructura de directorios es la misma):
Jboss AS 4.X
$JBOSS_HOME/server/default/deploy/jboss-web.deployer/server.xml
Jboss AS 5.X
$JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml
Jboss AS 6.X
$JBOSS_HOME/server/default/deploy/jbossweb.sar/server.xml
En el fichero server.xml
tendremos que especificar una serie de opciones a nivel de conector. Si estamos conectándonos directamente a Jboss por norma general es el 8080
. Habilitaremos la compresión con la opción compression
y el tipo de contenido a comprimir con compressableMimeType
<!-- A HTTP/1.1 Connector on port 8080 --> <Connector protocol="HTTP/1.1" port="${jboss.web.http.port}" address="${jboss.bind.address}" redirectPort="${jboss.web.https.port}" compression="on" compressableMimeType="text/html,text/plain,text/css,text/javascript,text/json,application/x-javascript,application/javascript,application/json" />
Las distintas opciones y parametrización de las mismas puedes encontrarlas en la documentación del componente Jboss Web para el conector HTTP.
Jboss AS 7 y superiores
A partir de la versión Jboss AS 7 la arquitectura del servidor de aplicaciones cambia y la compresión de contenido no se realiza a nivel de conector HTTP sino como configuración de sistema del servidor.
Jboss AS 7.0.x a 7.1.0
Por una parte, en las primeras versiones que comprenden Jboss AS 7.0.x a 7.1.0 no tienen soporte para compresión gzip (reportado ya como “bug” hace un tiempo) aunque se puede configurar un filtro de compresión para determinado tipo de contenido en el descriptor web.xml
de la aplicación web.
JBoss AS 7.1.1/EAP 6.2 y superiores
En estas versiones se añade de nuevo soporte para compresión gzip a nivel de servidor de aplicaciones. Podremos especificarla de dos maneras:
- Añadiendo las siguientes opciones en el fichero standalone.xml o domain.xml (según el modo que estemos utilizando) después de la etiqueta :
<system-properties> <property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION" value="on"/> <property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION_MIME_TYPES" value="text/javascript,text/css,text/html,text/xml,text/json"/> <!-- anadir otros tipos de contenido que queramos comprimir con gzip --> </system-properties>
- Al iniciar Jboss, podemos pasarle a Java las siguientes opciones:
-Dorg.apache.coyote.http11.Http11Protocol.COMPRESSION=on -Dorg.apache.coyote.http11.Http11Protocol.COMPRESSION_MIME_TYPES="text/javascript,text/css,text/html,text/xml,text/json”
Comprobaciones finales
Una vez realizado el cambio reiniciamos el servidor de aplicaciones. Podremos comprobar si se está comprimiendo contenido analizando las cabeceras de respuestas, por ejemplo con el complemento Firebug en Firefox (Red → Encabezados):
También podemos utilizar curl:
curl --head –compressed http://[IP]:[Puerto]
Deberíamos ver una línea content-encoding
tal que:
... Content-Type: text/html Transfer-Encoding: chunked Content-Encoding: gzip Vary: Accept-Encoding ...