5.FreshMinutes.IT – Java & IT

5 minutes pour consolider ses connaissances en Java et dans les Nouvelles Technos.
  • Accueil
  • À propos
  • Curriculum Vitae
  • Télécharger Java
  • Contact, Twitter, Tumblr & Buzz

Activer la compression GZip sur votre serveur Tomcat, afin d’optimiser le temps de chargement de vos pages

Eric Vialle | Vendredi 29 janvier 2010 | 0:04


Google Buzz

Depuis quelques années déjà, il est possible d’améliorer le temps de transfert des données transférées d’un serveur vers un navigateur web, en compressant toutes données pouvant encore l’être. J’entends par là que seront compressées, les fichiers HTML et autres fichiers de ressources basés sur du texte, tel que les fichiers CSS ou les fichiers Javascripts. Il serait quasi inutile de vouloir recompresser un fichier déjà compressé tel un fichier JPEG ou un fichier ZIP. Néanmoins, la compression de données n’est pas activée par défaut, sur grand nombre de serveurs web. Nous allons dans cet article, voir comment ce système de compression fonctionne, et comment l’activer sur Tomcat.

Comment la compression de données serveur web/client fonctionne ?

Aujourd’hui, une grande majorité des données échangées entre un serveur web/navigateurs sont des données compressées. Toutefois, cela nécessite deux choses:

  • un navigateur qui accepte le contenu encodé au format GZip
  • un serveur web qui permet de générer du contenu au format GZip

Observateur et malin comme vous l’êtes, vous avez du comprendre que les données sont compressées au format GZip par le serveur, puis décompressée par votre navigateur web. Tous les navigateurs du marché (même Internet Explorer :twisted: ), ainsi que n’importe quel serveur digne de ce nom disposent de ces possibilités depuis quelque années déjà.

gzip (acronyme de GNU zip) est un logiciel libre de compression qui a été créé pour remplacer le programme compress d’Unix.
gzip est basé sur l’algorithme deflate, qui est une combinaison des algorithmes LZ77 et Huffman.  De manière à simplifier les développements de logiciels utilisant la compression, la bibliothèque zlib a été créée. Elle supporte le format de fichier gzip et l’algorithme de compression deflate.
Cette bibliothèque est très largement utilisée, grâce à sa taille réduite, son efficacité et sa souplesse d’utilisation.
Le format de donnée compressée zlib, l’algorithme deflate et le format de fichier compressé gzip ont été standardisés avec les RFC 1950, RFC 1951 et RFC 1952.
Source: Wikipedia

Afin de signaler le fait que le navigateur permet de lire du contenu compressé dans ce format là, celui-ci signale cette possibilité dans sa requête HTTP GET au serveur, via le champ “Accept-Encoding“.Si il a la capacité de compresser ses données, il répondra dans l’en tête de sa réponse que le contenu est compressé via le champ “Content-Encoding“. Vous pouvez observer le contenu des en-têtes via le plugin Firebug pour Firefox.

Par exemple, pour la page d’accueil de Google, vous verrez que les données transmises sont compressées:

Si la valeur Content-Encoding du serveur est “text/html“, cela veut dire que les données de votre page HTML n’ont pas été compressées pendant leur transport.

Comment activer la compression de données pour Tomcat ?

Il existe différentes façons de le faire, cela dépend de la configuration de votre serveur. Je vais en énumérer deux ici. Une pour les serveurs Tomcat “affrontant seuls” le web, et une autre  pour les serveurs travaillant de concert avec un serveur Apache 2 mod_proxy activé.

Tomcat Seul

Personnellement je n’ai pas testé cette méthode, je vous recommande dans ce cas de lire ce billet en anglais; http://viralpatel.net/blogs/2008/11/enable-gzip-compression-in-tomcat.html

Dans, cet article, il est mentionné que ceci peut-être fait très simplement en modifiant votre fichier /conf/server.xml et en appliquant cette configuration:

<Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true"
               compression="on"
         compressionMinSize="2048"
         noCompressionUserAgents="gozilla, traviata"
         compressableMimeType="text/html,text/xml"/>

Apache 2 et Tomcat 6

La plupart des serveurs en production, mettent le serveur Tomcat derrière un serveur Apache (voir lighthttpd ou nginx). C’est la solution que j’utilise, en utilisant le mod_proxy d’Apache 2, et que j’ai mis en œuvre dans ce précédent billet. “Rediriger le port 8080 de Tomcat vers le port 80 d’Apache 2“. Pour activer, la compression, suivez ces trois étapes

Premièrement, activez la compression dans Apache 2, en exécutant cette commande dans votre shell:

a2enmod deflate

Deuxièmement, paramétrez le fichier définissant votre site web (un fichier défini usuellement dans: /etc/apache/sites-available)

<virtualhost *:80>
 ServerName dev.diilo.com

 # here comes the proxy details!!!
 ProxyRequests Off
 <proxy *>
 Order deny,allow
 #The Tomcat server IP address
 Allow from localhost
 </proxy>

 ProxyPass / ajp://localhost:8009/
 ProxyPassReverse / ajp://localhost:8009/

 # mod_deflate (compress output for browsers that support it)
 AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript text/x-js  application/javascript

</virtualhost>

Ce qui permet réellement la compression de votre site web est défini par la ligne:
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript text/x-js application/javascript
Comme vous pouvez vous en douter, nous n’autorisons dans cette ligne que certains format de fichiers à être compresser. Essayer de compresser tous type de fichiers, y compris les JPEG, MP3, etc. nous ferait perdre beaucoup de ressources inutilement.

Troisièmement (et pour finir), n’oubliez pas de recharger la configuration de votre serveur Apache 2

/etc/init.d/apache2 reload

Votre serveur est normalement prêt. Je vous recommande de tester que le fait que vos pages soient bien compressées, en observant l’en tête HTTP de réponse de vos pages web. Pour cela, il existe deux possibilités soit via des outils comme Firebug, soit via des outils en ligne comme Web-Sniffer.


Catégories
Java, Java EE, Tutoriel
Tags
apache, gzip, optimisation, Tomcat
Flux rss des commentaires
Flux rss des commentaires
Trackback
Trackback

« Récupérer l’adresse IP du client avec Struts 2 Le Paris JUG a fêté ses 2 ans: compte-rendu »

4 Responses to “Activer la compression GZip sur votre serveur Tomcat, afin d’optimiser le temps de chargement de vos pages”

  1. Optimiser le temps de chargement pour le web mobile avec iPhone, jQTouch, Struts 2 et Tomcat – 5.FreshMinutes.IT – Java & IT dit :
    Jeudi 25 février 2010 à 14:04

    [...] Pour savoir comment activer la compression GZIP sur votre serveur Tomcat, je vous recommande de lire ce précédent bill…. [...]

  2. jozzy-online dit :
    Vendredi 26 février 2010 à 8:09

    Merci d’avoir un blog interessant

  3. toupil dit :
    Mardi 2 mars 2010 à 16:43

    article très clair! je vais m’y mettre pour optimiser et suivre les recommandations de page speed ;)

  4. toupil dit :
    Mercredi 3 mars 2010 à 19:29

    gain : 77% :)
    il est possible de tester à l’aide de ce très bon outil : http://www.whatsmyip.org/http_compression/

Leave a Reply

Cliquer ici pour annuler la réponse.

Articles récents

  • Optimiser le temps de chargement pour le web mobile avec iPhone, jQTouch, Struts 2 et Tomcat
  • La philosophie du Domain Driven Design User Group et l’état des lieux * Users Group en Février 2010
  • Introduction au NoSQL (et de Redis) ou le compte rendu du NoSQL User Group Paris de Février 2010
  • Gérer le Cache-Control HTTP dans une application Web Java EE avec Tomcat
  • Compiler son code? “It’s so 2000s” ou un apercu de Play et JRebel
  • Le blog change d’adresse
  • Le Paris JUG a fêté ses 2 ans: compte-rendu
  • Activer la compression GZip sur votre serveur Tomcat, afin d’optimiser le temps de chargement de vos pages

Navigation

  • Actualités Flux pour tous les articles classés dans Actualités
  • Architecture IT Flux pour tous les articles classés dans Architecture IT
  • Base de données Flux pour tous les articles classés dans Base de données
  • Java Flux pour tous les articles classés dans Java
    • Dévelopement Tips Flux pour tous les articles classés dans Dévelopement Tips
    • EDI Flux pour tous les articles classés dans EDI
    • J2ME Flux pour tous les articles classés dans J2ME
    • J2SE Flux pour tous les articles classés dans J2SE
    • Java EE Flux pour tous les articles classés dans Java EE
    • Tutoriel Flux pour tous les articles classés dans Tutoriel
  • Non classé Flux pour tous les articles classés dans Non classé
  • NoSQL Flux pour tous les articles classés dans NoSQL

Promo

Mots Clefs

adobe apache application web Base de données benchmark bugs c# checkstyle dérivation eclipse find bugs findbugs flex framework play google gzip http iPhone jar Java Java User Group java web start JVM microsoft mysql object objet open source optimisation oracle performance plugin pmd polymorphisme qualité recrutement rich internet application serveur silverlight struts struts 2 sun test Tomcat web

WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.

Twitter

  • Je recherche un nouveau Job 18 hrs ago
  • More updates...

Livres Pour Aller Plus Loin…

Blogoliste

  • Berthou.com
  • Le blog de hugu
  • PHP – Le Blog de Fatiha
  • techno.blog(java4it)
Get Adobe Flash playerPlugin by wpburn.com wordpress themes
rss Flux rss des commentaires valid xhtml 1.1 design by jide powered by Wordpress get firefox