<-
Apache > Serveur HTTP > Documentation > Version 2.5 > Modules

Module Apache mod_deflate

Langues Disponibles:  en  |  fr  |  ja  |  ko 

Description:Comprime le contenu avant de le servir au client
Statut:Extension
Identificateur de Module:deflate_module
Fichier Source:mod_deflate.c

Sommaire

Le module mod_deflate implémente le filtre de sortie DEFLATE qui permet de comprimer la sortie de votre serveur avant de l'envoyer au client sur le réseau.

Directives

Sujets

Voir aussi

top

Exemples de configurations

Compression et TLS

Certaines applications web sont vulnérables à une attaque pour vol d'informations lorsqu'une connexion TLS transporte des données compressées par deflate. Pour plus de détails, documentez-vous sur la famille d'attaques "BREACH".

Voici un exemple simple de configuration qui permet de comprimer les types de contenu à base de texte.

Ne comprime que certains types de documents

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
top

Activation de la compression

Compression et TLS

Certaines applications web sont vulnérables à une attaque pour vol d'informations lorsqu'une connexion TLS transporte des données compressées par deflate. Pour plus de détails, documentez-vous sur la famille d'attaques "BREACH".

Compression de la sortie

La compression est implémentée par le filtre DEFLATE. La directive suivante active la compression des documents dans le conteneur où elle est placée :

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip

Si vous voulez limiter la compression à certains types MIME particuliers, vous pouvez utiliser la directive AddOutputFilterByType. Voici un exemple où la compression n'est activée que pour les fichiers html de la documentation d'Apache :

<Directory "/your-server-root/manual">
    AddOutputFilterByType DEFLATE text/html
</Directory>

Note

Le filtre DEFLATE est toujours inséré après les filtres RESOURCE comme PHP ou SSI. Il n'affecte jamais les sous-requêtes internes.

Note

La variable d'environnement force-gzip, définie à l'aide de la directive SetEnv, permet d'ignorer la configuration de votre navigateur quant aux codages acceptés, et d'envoyer sans condition une sortie comprimée.

Décompression de la sortie

Le module mod_deflate fournit aussi un filtre permettant de décomprimer un corps de réponse comprimé par gzip. Pour activer cette fonctionnalité, vous devez insérer le filtre INFLATE dans la chaîne de filtrage en sortie via la directive SetOutputFilter ou AddOutputFilter, comme dans l'exemple suivant :

<Location /dav-area>
    ProxyPass http://example.com/
    SetOutputFilter INFLATE
</Location>

Dans cet exemple, les sorties comprimées par gzip en provenance de example.com seront décomprimées afin de pouvoir être éventuellement traitées par d'autres filtres.

Décompression de l'entrée

Le module mod_deflate fournit également un filtre permettant de décomprimer un corps de requête comprimé par gzip. Pour activer cette fonctionnalité, vous devez insérer le filtre DEFLATE dans la chaîne de filtrage en entrée via la directive SetInputFilter ou AddInputFilter, comme dans l'exemple suivant :

<Location /dav-area>
    SetInputFilter DEFLATE
</Location>

Désormais, si une requête contient un en-tête Content-Encoding: gzip, son corps sera automatiquement décomprimé. Peu de navigateurs sont actuellement en mesure de comprimer les corps de requêtes. Cependant, certaines applications spécialisées supportent les requêtes comprimées, comme par exemple certains clients WebDAV.

Note à propos de l'en-tête Content-Length

Si vous évaluez vous-même la taille du corps de requête, ne faites pas confiance à l'en-tête Content-Length! L'en-tête Content-Length indique la longueur des données en provenance du client, et non la quantité d'octets que représente le flux de données décompressé.

top

Prise en compte des serveurs mandataires

Le module mod_deflate envoie un en-tête de réponse HTTP Vary: Accept-Encoding pour avertir les mandataires qu'une réponse enregistrée dans le cache ne doit être envoyée qu'aux clients qui ont envoyé l'en-tête de requête Accept-Encoding approprié. Ceci permet d'éviter l'envoi d'un contenu comprimé à un client qui ne sera pas en mesure de l'interpréter.

Si vous avez défini des exclusions spécifiques dépendant, par exemple, de l'en-tête User-Agent, vous devez ajouter manuellement des données à l'en-tête Vary afin d'informer les mandataires des restrictions supplémentaires. Par exemple, dans la configuration classique où l'addition du filtre DEFLATE dépend du contenu de l'en-tête User-Agent, vous devez spécifier :

Header append Vary User-Agent

Si votre décision de comprimer le contenu dépend d'autres informations que celles contenues dans les en-têtes de la requête (par exemple la version HTTP), vous devez attribuer à l'en-tête Vary la valeur *, ce qui permet d'empêcher les mandataires compatibles de tout mettre en cache.

Exemple

Header set Vary *
top

DeflateAlterETag Directive

Description:Comment l'en-tête sortant ETag doit être modifié au cours de la compression
Syntaxe:DeflateAlterETag AddSuffix|NoChange|Remove
Défaut:DeflateAlterETag AddSuffix
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_deflate

La directive DeflateAlterETag permet de spécifier comment l'en-tête ETag doit être modifié lorsqu'une réponse est compressée.

AddSuffix

Ajoute la méthode de compression à la fin de l'en-tête, ce qui a pour effet d'attribuer un en-tête ETag unique aux représentations compressées et non compressées. C'est l'option par défaut depuis la version 2.4.0, mais empêche de servir des codes d'état "HTTP Not Modified" (304) en réponse aux requêtes pour un contenu compressé.

NoChange

Ne modifie pas l'en-tête ETag dans une réponse compressée. C'était l'option par défaut avant la version 2.4.0, mais cela ne respectait pas la préconisation HTTP/1.1 selon laquelle chaque représentation de la même ressource doit posséder un en-tête ETag unique.

Remove

Supprime l'en-tête ETag dans les réponses compressées, ce qui a pour effet de rendre impossibles certaines requêtes conditionnelles, mais permet d'éviter les inconvénients des options précédentes.

top

DeflateBufferSize Directive

Description:Taille du fragment que zlib devra comprimer en une seule fois
Syntaxe:DeflateBufferSize valeur
Défaut:DeflateBufferSize 8096
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_deflate

La directive DeflateBufferSize permet de spécifier la taille en octets du fragment que zlib devra comprimer en une seule fois.

top

DeflateCompressionLevel Directive

Description:Le niveau de compression que nous appliquons à la sortie
Syntaxe:DeflateCompressionLevel valeur
Défaut:La valeur par défaut de zlib
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_deflate

La directive DeflateCompressionLevel permet de spécifier le niveau de compression à utiliser ; plus grande est la valeur, meilleure sera la compression, mais plus grand sera aussi le temps CPU nécessaire pour effectuer le traitement.

La valeur doit être comprise entre 1 (compression minimale) et 9 (compression maximale).

top

DeflateFilterNote Directive

Description:Enregistre le taux de compression sous la forme d'une note à des fins de journalisation
Syntaxe:DeflateFilterNote [type] nom de la note
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_deflate

La directive DeflateFilterNote permet de spécifier qu'une note à propos du taux de compression doit être attachée à la requête. Le nom de la note est passé sous la forme d'un argument de la directive. Vous pouvez utiliser cette note à des fins statistiques en enregistrant sa valeur dans votre journal des accès.

Exemple

      DeflateFilterNote ratio
    
      LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate
      CustomLog logs/deflate_log deflate

Pour extraire des informations plus précises de vos journaux, vous pouvez utiliser l'argument type pour spécifier le type de données de la note enregistrée dans le journal. type peut prendre une des valeurs suivantes :

Input
Enregistre dans la note la taille en octets du flux en entrée du filtre.
Output
Enregistre dans la note la taille en octets du flux en sortie du filtre.
Ratio
Enregistre le taux de compression (sortie/entrée * 100) dans la note. Il s'agit de la valeur par défaut si l'argument type est omis.

Vous pouvez donc configurer votre journalisation de la manière suivante :

Journalisation détaillée

DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio

LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog logs/deflate_log deflate

Voir aussi

top

DeflateMemLevel Directive

Description:La quantité de mémoire utilisable par zlib pour la compression
Syntaxe:DeflateMemLevel valeur
Défaut:DeflateMemLevel 9
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_deflate

La directive DeflateMemLevel permet de spécifier la quantité de mémoire utilisable par zlib pour la compression (une valeur comprise entre 1 et 9).

top

DeflateWindowSize Directive

Description:Taille de la fenêtre de compression zlib
Syntaxe:DeflateWindowSize valeur
Défaut:DeflateWindowSize 15
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_deflate

La directive DeflateWindowSize permet de spécifier la fenêtre de compression zlib (une valeur comprise entre 1 et 15). En général, plus grande sera la taille de la fenêtre, plus grand sera le taux de compression auquel on pourra s'attendre.

Langues Disponibles:  en  |  fr  |  ja  |  ko 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.