Compression

Introduction

La compression HTTP est une technique prise en charge par la plupart des navigateurs et des serveurs Web. Lorsqu'elle est activée des deux côtés, elle permet de réduire la taille des téléchargements de texte (HTML, CSS et JavaScript) de 50 à 90 %. La compression HTTP est activée par défaut sur tous les navigateurs de nouvelle génération mais tous les serveurs Web la désactivent également par défaut, ce qui signifie qu'elle doit être activée de façon explicite. Il est étonnant de constater que, malgré les avantages qu'elle représente pour les utilisateurs et les économies de bande passante qu'elle permet de réaliser côté serveur, la compression est désactivée sur un nombre considérable de sites.

L'activation de la compression est une opération relativement rapide et très rentable dans la mesure où elle permet de réaliser des économies de bande passante importantes. Toutefois, en raison de divers problèmes liés aux navigateurs et aux serveurs, cette opération peut se montrer plus difficile qu'un simple basculement de mode et il est parfois recommandé d'avoir recours à des outils tiers. Pour vous faciliter la tâche, des instructions applicables aux serveurs Web les plus populaires vous sont fournies ci-dessous. Au cas où vous utiliseriez un serveur Web différent, un aperçu des problèmes de compatibilité associés à ces instructions vous est également présenté.

Vérification de la compression

Vous pouvez vérifier si la compression est activée sur un site de plusieurs manières. Vous pouvez utiliser le navigateur Web Firefox et son plugin Web Developer Toolbar[1] pour analyser la taille des pages et afficher les avantages de la compression pour les serveurs sur lesquels celle-ci est activée.

Des outils d'analyse de la compression sont également disponibles en ligne, notamment sur les sites Web http://www.port80software.com/ et http://pipeboost.com/, et un programme d'analyse de pages plus performant se trouve à votre disposition sur la page http://www.websiteoptimization.com/services/analyze/.

Effets de la compression

L'analyse présentée ci-dessous permet d'évaluer les avantages de la compression pour différents sites populaires. Les délais de téléchargement indiqués sont basés sur une bande passante de 20 Kbits/s en moyenne.

Site Taille sans compression (Ko) Taille avec compression (Ko) Délai de téléchargement sans compression (sec) Délai de téléchargement avec compression (sec) Economie relative
Page d'accueil du site Web de Blackwell Publishing 170 156 68 62 8%
Page d'accueil du site Web de Development Gateway 78 70 31 28 10%
Page d'accueil du site Web de CNN 796 695 318 278 13%
Page relative aux sciences informatiques du site Web SpringerLink 450 173 180 69 62%
Page des résultats Google pour le terme "Développement" 27 12 11 5 66%

Activation de la compression

Sélectionnez le serveur Web que vous utilisez pour consulter le guide d'activation de la compression approprié :

Si votre serveur Web n'est pas répertorié dans la liste ci-desssus, veuillez consulter la documentation associée à votre serveur pour découvrir comment activer la compression. Vous pouvez également consulter la section relative aux problèmes de compatibilité ci-dessous afin d'identifier les éventuels problèmes associés à votre serveur.

Une fois la compression activée

Une fois la compression activée sur votre serveur Web, il est recommandé de vérifier les éléments suivants :

Compatibilité
Comme pour toute modification, il est recommandé de tester votre site à l'aide de plusieurs navigateurs pour vérifier qu'il est compatible avec ceux-ci. Certains navigateurs d'ancienne génération peuvent présenter des problèmes de compatibilité et il est donc utile de vérifier que votre site est pris en charge par ces navigateurs une fois la compression activée. Reportez-vous à la section Compatibilité avec les navigateurs pour plus de détails.

Charge de l'UC
La transmission de contenus compressés peut entraîner une augmentation de la charge de l'UC sur le serveur. Ce comportement ne pose généralement aucun problème sur les nouveaux serveurs mais il peut entraîner une utilisation importante de l'UC aux heures de pointe sur les ordinateurs d'ancienne génération, et ce particulièrement pour les sites populaires plus volumineux. L'utilisation de l'UC ne doit en aucun cas s'approcher de 100 % car si elle atteint sa capacité maximale, un goulot d'étranglement se forme et le téléchargement des pages se voit considérablement ralentir. Une fois la compression activée, vérifiez l'utilisation de l'UC sur votre serveur et, si elle s'approche régulièrement de 100 %, effectuez l'une des opérations suivantes (par ordre de préférence) : compressez le contenu statique à l'avance, réduisez le niveau de compression si possible, désactivez la compression pour les pages dynamiques, supprimez certains éléments de la liste des types de fichier pour lesquels la compression est activée ou désactivez la compression pour un ou plusieurs sites sur le serveur.

Précompression du contenu statique

Apache et IIS permettent tous deux de compresser le contenu statique à l'avance. De cette manière, le fichier est compressé puis mis en cache afin de pouvoir être utilisé ultérieurement. Contrairement aux fichiers dynamiques qui doivent être compressés pour chaque requête, les fichiers statiques peuvent être précompressés afin d'éviter la compression répétée d'un même fichier, réduire les délais système et améliorer le temps de réponse.

Notez toutefois que si vous utilisez un serveur sur lequel la précompression et la mise en cache ne sont pas automatiquement mises en oeuvre (versions antérieures d'Apache, par exemple), vous devrez mettre à jour le fichier compressé de façon manuelle après chaque modification apportée au fichier source. Notez également que les inclusions côté serveur ne sont pas prises en charge pour les fichiers précompressés.

Sur IIS, la précompression et la mise en cache se font de manière automatique et ne nécessitent aucune intervention de l'administrateur.

Pour les versions antérieures à la version 1.3.26.1 d'Apache 1.3 avec mod_gzip, l'administrateur doit créer des versions .gz compressées des fichiers statiques à l'aide du programme gzip puis les placer à proximité des fichiers non compressés dans la structure de fichiers (par exemple, le répertoire du fichier accueil.html doit également contenir le fichier compressé accueil.html.gz). Le fichier de configuration doit contenir une ligne de type mod_gzip_can_negotiate Yes pour indiquer qu'Apache doit rechercher un fichier compressé de nom similaire.

Avec la version 1.3.26.1a et les versions ultérieures d'Apache avec mod_gzip, le contenu statique est automatiquement compressé si la ligne mod_gzip_update_static Yes a été ajoutée au fichier de configuration d'Apache.

Pour Apache 2.x avec mod_deflate, la configuration de la précompression est relativement complexe puisqu'elle nécessite l'utilisation du module MultiViews ainsi que l'attribution d'un nouveau nom aux fichiers compressés. Pour en savoir plus, consultez les pages Web http://www.everything2.com/index.pl?node_id=1690029 ou http://www.webmasterworld.com/forum92/5880.htm. Bien que mod_deflate soit légèrement plus simple d'utilisation, vous pouvez également utiliser mod_gzip avec Apache 2.x pour activer la précompression automatique des contenus statiques.


Informations supplémentaires sur la compression

Les informations suivantes visent à présenter divers problèmes liés à la compression. Elles vous permettront de mieux comprendre les instructions fournies ci-dessus et d'apporter vos propres modifications à votre serveur Web si nécessaire. Notez qu'il n'est pas nécessaire de comprendre les divers problèmes évoqués ci-dessous pour activer la compression sur votre serveur.

Compatibilité de la compression

Bogues de navigateur

De nombreux navigateurs ont pendant longtemps présenté des bogues non détectés empêchant toute compression. Tous les principaux navigateurs mis à niveau fonctionnent désormais normalement lorsque la compression est activée et tout navigateur sur lequel la compression est supposément prise en charge devrait donc se montrer approprié.

Malheureusement, il est impossible de garantir que tous les utilisateurs utilisent la dernière version d'un navigateur efficace ou sont en mesure de procéder à la mise à niveau de leur navigateur. Pour les utilisateurs qui utilisent une ancienne version, la seule solution possible est de désactiver la décompression.

Le navigateur signale au serveur qu'il prend en charge la compression en envoyant un en-tête dans chaque requête :

Accept-encoding: gzip

Les navigateurs qui ne prennent pas en charge la compression n'envoient aucun en-tête. Si le serveur prend également en charge la compression, une réponse compressée est renvoyée au navigateur et l'en-tête suivant indique au navigateur qu'il doit décompresser le contenu avant de pouvoir l'utiliser :

Content-encoding: gzip

Certains serveurs tels qu'Apache peuvent activer ou désactiver la compression en fonction de l'en-tête de la demande d'agent utilisateur du navigateur, lequel indique le nom et la version du navigateur. Ces serveurs sont ainsi capables de détecter si la compression n'est pas correctement prise en charge par un navigateur et de la désactiver sur celui-ci afin de permettre le téléchargement d'un site.

Une liste des navigateurs et des types de contenu problématiques et une description du mode de configuration de plusieurs serveurs Web vous seront fournies plus bas dans ce chapitre.

Bien que les versions 4.06 à 4.08 de Nescape Navigator soient supposées prendre en charge la compression, elles ne traitent pas correctement les données compressées. Ces navigateurs doivent donc pouvoir être détectés et la compression entièrement désactivée.

Ces navigateurs peuvent être identifiés par l'une des chaînes d'agent utilisateur suivantes :

Mozilla/4.06
Mozilla/4.07
Mozilla/4.08

De plus, la compression des types de contenu autres que texte/HTML (pages HTML) n'est pas prise en charge sur les autres versions de Netscape 4 et doit donc être désactivée. Vous pouvez identifier ces versions de Netscape 4 grâce aux chaînes d'agent utilisateur qui commencent par Mozilla/4 mais il est toutefois important de rappeler que plusieurs autres navigateurs, tels qu'Internet Explorer et Opera, utilisent également cette chaîne et que la compression doit être activée pour certains d'entre eux.

Notez également que certaines versions d'Internet Explorer 5.5 et 6.0 présentent un bug[2] ayant pour effet de corrompre les fichiers compressés si un gestionnaire de téléchargement ou un autre type de gestionnaire HTTP est installé sur l'ordinateur de l'utilisateur. Ce bogue a été rectifié par un correctif intégré à Windows XP Service Pack 2. Bien qu'il ne soit pas possible de vérifier si le correctif a été installé sur votre ordinateur, vous pouvez vérifier que vous utilisez bien IE6 avec Service Pack 2 en détectant la présence de la chaîne d'agent utilisateur suivante :

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1

Nous vous recommandons de désactiver la compression pour tous les agents utilisateur dont la chaîne correspond à Mozilla/4.0 (compatible; MSIE 6.0 mais pas à la chaîne ci-dessus (qui indique que le bogue a été corrigé). De cette manière, vous désactiverez la compression pour tous les utilisateurs de IE4, IE5, IE5.5 et IE6 à l'exception de ceux qui utilisent IE6 avec SP2. En effet, mieux vaut assurer la prise en charge de ces navigateurs sans compression que de renoncer entièrement à leur prise en charge. Cette opération risque d'entraîner des dommages collatéraux (lorsque la compression est désactivée sur des navigateurs où elle n'est pas prise en charge) mais il est impossible de tester chaque navigateur pour déterminer s'il prend en charge ou non la compression.

Les versions de Norton Internet Security antérieures ou équivalentes à 2005 désactivent la compression lorsqu'elles s'exécutent sur un ordinateur client. Le produit httpZip de Port 80 permet de corriger ce problème pour toutes les versions de IIS. Norton Internet Security 2006 présente également un problème[3] avec les contenus compressés puisqu'il romp le protocole HTTP. Ce problème peut avoir un impact considérable sur le fonctionnement de Cold Fusion Server[4]et, de par sa nature, est difficile à corriger. Aucune solution n'a encore été trouvée à ce problème.

Des informations supplémentaires sur la prise en charge de la compression sur divers navigateurs sont disponibles sur la page http://schroepl.net/projekte/mod_gzip/browser.htm.

Compatibilité des types de contenu

Certains navigateurs ne parviennent pas à traiter certains types de contenu (notamment les fichiers binaires) lorsqu'ils sont compressés.

PDF

Les fichiers PDF compressés sont parfois illisibles lorsque vous les affichez à l'aide d'Acrobat Reader et d'Internet Explorer Nous vous recommandons donc de les exclure de la liste des types de fichier à compresser.

Formats d'image

Il est généralement inutile de compresser les images dans la mesure où celles-ci sont souvent déjà compressées et où une compression supplémentaire pourrait entraîner une légère augmentation de la taille du fichier.

JavaScript

Lors de la lecture des fichiers JavaScript compressés, Internet Explorer 5 déclenche parfois un événement onLoad avant que le fichier JavaScript n'ait été décompressé, entraînant ainsi des problèmes avec certains scripts. Les recommandations que nous vous avons fournies ci-dessus vous permettront d'éviter ce problème étant donné qu'elle préconisent la désactivation de la compression JavaScript pour ce navigateur. Vous pouvez également tester votre site avec IE 5 afin de vérifier s'il contient des éléments JavaScript.

CSS

Certains navigateurs d'ancienne génération ne prennent pas en charge les fichiers CSS compressés. Ce comportement résulte de divers facteurs et il est donc difficile d'identifier les circonstances dans lesquelles il est susceptible de se produire. Il conduit généralement à l'affichage d'une page à laquelle aucun fichier CSS n'a été appliqué. Si vous avez conçu vos pages de manière à ce qu'elles puissent être utilisées sans fichier CSS, tel qu'indiqué dans le chapitre Feuilles de style, n'hésitez pas à compresser vos fichiers CSS afin d'optimiser votre site pour une majorité d'utilisateurs.

Synthèse

  • Activez la compression pour les fichiers textuels (HTML, CSS et JavaScript) sur votre serveur
  • Tentez de précompresser votre contenu statique
  • Consultez le chapitre Compatibilité avec les navigateurs pour différents types de contenus compressés

Ressources supplémentaires sur la compression

http://www.webperformance.org/compression/

Références

[#1] https://addons.mozilla.org/en-US/firefox/addon/60

[#2] http://support.microsoft.com/default.aspx?scid=kb;en-us;Q313712

[#3] http://www.port80software.com/200ok/archive/2006/01/04/901.aspx

[#4] http://www.port80software.com/200ok/archive/2006/01/06/909.aspx