Serveur HTTP Apache Version 2.4

| Description: | Comprime le contenu avant de le servir au client | 
|---|---|
| Statut: | Extension | 
| Identificateur de Module: | deflate_module | 
| Fichier Source: | mod_deflate.c | 
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.

 Codages supportés
 Codages supportés Exemples de configurations
 Exemples de configurations Activation de la compression
 Activation de la compression Prise en compte des serveurs mandataires
 Prise en compte des serveurs mandataires Servir du contenu précompressé
 Servir du contenu précompressé DeflateAlterETag
 DeflateAlterETag DeflateBufferSize
 DeflateBufferSize DeflateCompressionLevel
 DeflateCompressionLevel DeflateFilterNote
 DeflateFilterNote DeflateInflateLimitRequestBody
 DeflateInflateLimitRequestBody DeflateInflateRatioBurst
 DeflateInflateRatioBurst DeflateInflateRatioLimit
 DeflateInflateRatioLimit DeflateMemLevel
 DeflateMemLevel DeflateWindowSize
 DeflateWindowSizeLe seul codage supporté est gzip afin d'assurer une complète
  compatibilité avec les anciens navigateurs. Le codage deflate
  n'est donc pas supporté ; voir à ce sujet la documentation de zlib pour une
  explication détaillée.
  
Certaines applications web sont vulnérables aux attaques visant le vol d'information lorsqu'une connexion TLS transmet des données compressées par deflate. Pour plus de détails, étudiez les attaques de la famille "BREACH".
Voici une configuration simple qui comprime les contenus à base de texte courants.
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
Certaines applications web sont vulnérables aux attaques pour vol d'information lorsque la connexion TLS transmet des données compressées par deflate. Pour plus d'informations, voir en détails la famille d'attaques de type "BREACH".
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>
      DEFLATE est toujours inséré après les
	filtres RESOURCE comme PHP ou SSI. Il n'affecte jamais les
	sous-requêtes internes.
      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.
      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.
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.
Content-LengthSi 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é.
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.
Header set Vary *
Comme mod_deflate recompresse le contenu demandé à
    chaque requête, il est possible de gagner en performances en précompressant
    ce contenu, et en forçant mod_deflate à servir ce contenu
    précompressé sans avoir à le recompresser à chaque requête.  Pour ce faire,
    utilisez une configuration du style :
<IfModule mod_headers.c>
    # Servir des fichiers CSS et JS compressés avec gzip, s'ils existent, et
    # si le client accepte gzip.
    RewriteCond "%{HTTP:Accept-encoding}" "gzip"
    RewriteCond "%{REQUEST_FILENAME}\.gz" -s
    RewriteRule "^(.*)\.(css|js)"         "$1\.$2\.gz" [QSA]
    # Servir des types de contenus corrects, et empêcher mod_deflate
    # d'effectuer un double gzip.
    RewriteRule "\.css\.gz$" "-" [T=text/css,E=no-gzip:1]
    RewriteRule "\.js\.gz$"  "-" [T=text/javascript,E=no-gzip:1]
    <FilesMatch "(\.js\.gz|\.css\.gz)$">
      # Servir le type de codage correct.
      Header append Content-Encoding gzip
      # Force les mandataires à mettre en cache séparément les fichiers
      # css/js gzippés & non gzippés.
      Header append Vary Accept-Encoding
    </FilesMatch>
</IfModule>
| 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 globale, serveur virtuel | 
| Statut: | Extension | 
| Module: | mod_deflate | 
| Compatibilité: | Disponible à partir de la version 2.4.58 du serveur HTTP Apache | 
La directive DeflateAlterETag permet de
    spécifier comment l'en-tête ETag doit être modifié lorsqu'une
    réponse est compressée.
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é.
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.
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.
| Description: | Taille du fragment que zlib devra comprimer en une seule fois | 
|---|---|
| Syntaxe: | DeflateBufferSize valeur | 
| Défaut: | DeflateBufferSize 8096 | 
| Contexte: | configuration globale, 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. Si la taille de la réponse compressée est supérieure à
    celle spécifiée par cette directive, httpd passera à un mode d'encodage
    fragmenté (l'en-tête HTTP Transfer-Encoding prend la valeur
    Chunked), ceci ayant comme effet de bord de ne définir aucun
    en-tête HTTP Content-Length. Il est important de connaître ce
    comportement, particulièrement lorsque httpd travaille derrière des
    mandataires inverses avec mise en cache, ou lorsque httpd est configuré pour
    utiliser mod_cache et mod_cache_disk car
    les réponses HTTP sans en-tête Content-Length peuvent ne pas
    être mises en cache.
| Description: | Le niveau de compression que nous appliquons à la sortie | 
|---|---|
| Syntaxe: | DeflateCompressionLevel valeur | 
| Défaut: | La valeur par défaut de zlib | 
| Contexte: | configuration globale, 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).
| 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 globale, 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.
      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 :
InputOutputRatiosortie/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 :
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog "logs/deflate_log" deflate
| Description: | Taille maximale des corps de requête décompressés | 
|---|---|
| Syntaxe: | DeflateInflateLimitRequestBody value | 
| Défaut: | Aucune limite, mais LimitRequestBody s'applique après la
compression | 
| Contexte: | configuration globale, serveur virtuel, répertoire, .htaccess | 
| Statut: | Extension | 
| Module: | mod_deflate | 
| Compatibilité: | Disponible à partir de la version 2.4.10 du serveur HTTP Apache | 
La directive
    DeflateInflateLimitRequestBody permet de
    spécifier la taille maximale d'un corps de requête décompressé. Si
    elle n'est pas définie, c'est la valeur de la directive LimitRequestBody qui s'applique au corps
    de requête décompressé.
| Description: | Nombre maximal de fois que le ratio de décompression d'un corps de requête peut être dépassé | 
|---|---|
| Syntaxe: | DeflateInflateRatioBurst value | 
| Défaut: | DeflateInflateRatioBurst 3 | 
| Contexte: | configuration globale, serveur virtuel, répertoire, .htaccess | 
| Statut: | Extension | 
| Module: | mod_deflate | 
| Compatibilité: | Disponible à partir de la version 2.4.10 du serveur HTTP Apache | 
La directive DeflateInflateRatioBurst permet de
    spécifier le nombre maximal de fois que la valeur de la directive DeflateInflateRatioLimit peut être dépassé
    avant l'arrêt du traitement de la requête.
| Description: | Ratio de décompression maximum pour les corps de requêtes | 
|---|---|
| Syntaxe: | DeflateInflateRatioLimit value | 
| Défaut: | DeflateInflateRatioLimit 200 | 
| Contexte: | configuration globale, serveur virtuel, répertoire, .htaccess | 
| Statut: | Extension | 
| Module: | mod_deflate | 
| Compatibilité: | Disponible à partir de la version 2.4.10 du serveur HTTP Apache | 
La directive DeflateInflateRatioLimit permet de
    définir le ratio maximum entre la taille d'un corps de requête compressé et
    sa taille décompressée. Ce ratio est vérifié au fur et à mesure de l'arrivée
    du corps de requête, et s'il est dépassé plus de DeflateInflateRatioBurst fois, le
    traitement de la requête est interrompu.
| Description: | La quantité de mémoire utilisable par zlib pour la compression | 
|---|---|
| Syntaxe: | DeflateMemLevel valeur | 
| Défaut: | DeflateMemLevel 9 | 
| Contexte: | configuration globale, 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).
| Description: | Taille de la fenêtre de compression zlib | 
|---|---|
| Syntaxe: | DeflateWindowSize valeur | 
| Défaut: | DeflateWindowSize 15 | 
| Contexte: | configuration globale, 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.