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.
Voici un exemple simple de configuration pour les impatients.
AddOutputFilterByType DEFLATE text/html text/plain text/xml
La configuration suivante, tout en produisant un contenu encore plus comprim�, est aussi beaucoup plus compliqu�e. N'utilisez pas cet exemple si vous ne comprenez pas tous les d�tails de la configuration.
<Location /> # Insert filter SetOutputFilter DEFLATE # Netscape 4.x a quelques probl�mes ... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 ont d'autres probl�mes BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE se fait passer pour Netscape, mais �a marche BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Ne pas comprimer les images SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary # On s'assure que les mandataires ne servent pas le mauvais # contenu Header append Vary User-Agent env=!dont-vary </Location>
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
Certains navigateurs populaires ne g�rent pas la compression de
tous les contenus, et pour r�soudre ce probl�me, vous pouvez
d�finir la note gzip-only-text/html
� 1
pour ne permettre que la compression des fichiers html (voir
ci-dessous). Si vous d�finissez cette note � toute autre
valeur que 1
, elle sera ignor�e.
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>
Pour les navigateurs qui ont des probl�mes avec la compression
de tous les types de fichiers, vous pouvez utiliser la directive
BrowserMatch
pour
d�finir la note no-gzip
, pour le navigateur
consid�r�, de fa�on � ce qu'aucune compression ne soit effectu�e.
Vous pouvez combiner no-gzip
avec
gzip-only-text/html
afin d'obtenir le meilleur
r�sultat possible. Dans ce cas, la premi�re note l'emporte sur la
deuxi�me. Consid�rons l'extrait suivant de l'exemple de configuration de la section
pr�c�dente :
BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Tout d'abord, on recherche un en-t�te User-Agent
qui signale un navigateur Netscape version 4.x. Ces versions ne
g�rent pas la compression des types de fichiers autres que
text/html
. En outre, les versions 4.06, 4.07 et 4.08
ont des probl�mes avec la d�compression des fichiers html. Par
cons�quent, nous d�sactivons compl�tement le filtre deflate pour
ces derniers.
La troisi�me directive BrowserMatch
corrige l'identit�
sous laquelle se pr�sente le navigateur ; en effet, Microsoft
Internet Explorer s'identifie aussi lui-m�me comme "Mozilla/4",
mais par contre, il sait g�rer les contenus compress�s. On
recherche donc la cha�ne additionnelle "MSIE" (\b
signifie "par mots entiers") dans l'en-t�te
User-Agent
, et si elle est trouv�e, on annule les
restrictions d�finies auparavant.
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-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�.
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 *
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.
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 :
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: | 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.