Serveur HTTP Apache Version 2.4
Langues Disponibles: ko
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.
Le seul codage é est gzip
afin d'assurer une complète compatibilité avec les anciens navigateurs. Le codage deflate
n'est donc pas é ; 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 AddOutputFilter
, comme dans l'exemple suivant :
<Location "/dav-area"> Proxy "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 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 ent les requêtes comprimées, comme par exemple certains clients WebDAV.
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é.
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 -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 -Agent
, vous devez spécifier :
Header append Vary -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
à 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: | 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 era à 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_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 U 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 é 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) "%{-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
Output
Ratio
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 :
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éé |
---|---|
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éé 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éé 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.
Langues Disponibles: ko