Serveur Apache HTTP 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.

Le 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 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" "$1\.css\.gz" [QSA]
# Servir des fichiers 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 "^(.*)\.js" "$1\.js\.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 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. 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 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).
| 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.
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: | DeflateInflateLimitRequestBodyvalue |
| D�faut: | Aucune limite, mais LimitRequestBody s'applique apr�s la
compression |
| Contexte: | configuration du serveur, 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: | 3 |
| Contexte: | configuration du serveur, 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: | 200 |
| Contexte: | configuration du serveur, 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 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).
| 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.