1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision: 1726578:1793934 (outdated) -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
9 Licensed to the Apache Software Foundation (ASF) under one or more
10 contributor license agreements. See the NOTICE file distributed with
11 this work for additional information regarding copyright ownership.
12 The ASF licenses this file to You under the Apache License, Version 2.0
13 (the "License"); you may not use this file except in compliance with
14 the License. You may obtain a copy of the License at
16 http://www.apache.org/licenses/LICENSE-2.0
18 Unless required by applicable law or agreed to in writing, software
19 distributed under the License is distributed on an "AS IS" BASIS,
20 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 See the License for the specific language governing permissions and
22 limitations under the License.
25 <modulesynopsis metafile="mod_deflate.xml.meta">
27 <name>mod_deflate</name>
28 <description>Comprime le contenu avant de le servir au
30 <status>Extension</status>
31 <sourcefile>mod_deflate.c</sourcefile>
32 <identifier>deflate_module</identifier>
35 <p>Le module <module>mod_deflate</module> implémente le filtre de
36 sortie <code>DEFLATE</code> qui permet de comprimer la sortie de
37 votre serveur avant de l'envoyer au client sur le réseau.</p>
39 <seealso><a href="../filter.html">Les filtres</a></seealso>
41 <section id="supportedencodings"><title>Codages supportés</title>
42 <p>Le seul codage supporté est <code>gzip</code> afin d'assurer une complète
43 compatibilité avec les anciens navigateurs. Le codage <code>deflate</code>
44 n'est donc pas supporté ; voir à ce sujet la <a
45 href="http://www.gzip.org/zlib/zlib_faq.html#faq38">documentation de zlib</a>
46 pour une explication détaillée.
50 <section id="recommended"><title>Exemples de configurations</title>
51 <note type="warning"><title>Compression et TLS</title>
52 <p>Certaines applications web sont vulnérables à une attaque pour
53 vol d'informations lorsqu'une connexion TLS transporte des
54 données compressées par deflate. Pour plus de détails,
55 documentez-vous sur la famille d'attaques "BREACH".</p>
57 <p>Voici un exemple simple de configuration qui permet de comprimer
58 les types de contenu à base de texte.</p>
60 <example><title>Ne comprime que certains types de documents</title>
61 <highlight language="config">
62 AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
68 <section id="enable"><title>Activation de la compression</title>
69 <note type="warning"><title>Compression et TLS</title>
70 <p>Certaines applications web sont vulnérables à une attaque pour
71 vol d'informations lorsqu'une connexion TLS transporte des
72 données compressées par deflate. Pour plus de détails,
73 documentez-vous sur la famille d'attaques "BREACH".</p>
76 <section id="output"><title>Compression de la sortie</title>
77 <p>La compression est implémentée par le <a
78 href="../filter.html">filtre</a> <code>DEFLATE</code>. La
79 directive suivante active la compression des documents dans le
80 conteneur où elle est placée :</p>
82 <highlight language="config">
83 SetOutputFilter DEFLATE
84 SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
87 <p>Si vous voulez limiter la compression à certains types MIME
88 particuliers, vous pouvez utiliser la directive <directive
89 module="mod_filter">AddOutputFilterByType</directive>. Voici un exemple
90 où la compression n'est activée que pour les fichiers html de la
91 documentation d'Apache :</p>
93 <highlight language="config">
94 <Directory "/your-server-root/manual">
95 AddOutputFilterByType DEFLATE text/html
99 <note><title>Note</title>
100 Le filtre <code>DEFLATE</code> est toujours inséré après les
101 filtres RESOURCE comme PHP ou SSI. Il n'affecte jamais les
102 sous-requêtes internes.
104 <note><title>Note</title>
105 La variable d'environnement <code>force-gzip</code>, définie à
106 l'aide de la directive <directive
107 module="mod_env">SetEnv</directive>, permet d'ignorer la
108 configuration de votre navigateur quant aux codages acceptés, et
109 d'envoyer sans condition une sortie comprimée.
113 <section id="inflate"><title>Décompression de la sortie</title>
114 <p>Le module <module>mod_deflate</module> fournit aussi un filtre
115 permettant de décomprimer un corps de réponse comprimé par gzip.
116 Pour activer cette fonctionnalité, vous devez insérer le filtre
117 <code>INFLATE</code> dans la chaîne de filtrage en sortie via la
118 directive <directive module="core">SetOutputFilter</directive> ou
119 <directive module="mod_mime">AddOutputFilter</directive>, comme
120 dans l'exemple suivant :</p>
122 <highlight language="config">
123 <Location "/dav-area">
124 ProxyPass "http://example.com/"
125 SetOutputFilter INFLATE
129 <p>Dans cet exemple, les sorties comprimées par gzip en
130 provenance de example.com seront décomprimées afin de pouvoir
131 être éventuellement traitées par d'autres filtres.
135 <section id="input"><title>Décompression de l'entrée</title>
136 <p>Le module <module>mod_deflate</module> fournit également un filtre
137 permettant de décomprimer un corps de requête comprimé par gzip.
138 Pour activer cette fonctionnalité, vous devez insérer le filtre
139 <code>DEFLATE</code> dans la chaîne de filtrage en entrée via la
140 directive <directive module="core">SetInputFilter</directive> ou
141 <directive module="mod_mime">AddInputFilter</directive>, comme
142 dans l'exemple suivant :</p>
144 <highlight language="config">
145 <Location "/dav-area">
146 SetInputFilter DEFLATE
150 <p>Désormais, si une requête contient un en-tête
151 <code>Content-Encoding: gzip</code>, son corps sera
152 automatiquement décomprimé. Peu de navigateurs sont actuellement
153 en mesure de comprimer les corps de requêtes. Cependant,
154 certaines applications spécialisées supportent les requêtes
155 comprimées, comme par exemple certains clients <a
156 href="http://www.webdav.org">WebDAV</a>.</p>
158 <note type="warning"><title>Note à propos de l'en-tête
159 <code>Content-Length</code></title>
160 <p>Si vous évaluez vous-même la taille du corps de requête,
161 <em>ne faites pas confiance à l'en-tête
162 <code>Content-Length</code>!</em> L'en-tête
163 Content-Length indique la longueur des données en provenance du
164 client, et <em>non</em> la quantité d'octets que représente le
165 flux de données décompressé.</p>
170 <section id="proxies"><title>Prise en compte des serveurs mandataires</title>
172 <p>Le module <module>mod_deflate</module> envoie un en-tête de
173 réponse HTTP <code>Vary: Accept-Encoding</code> pour avertir les
174 mandataires qu'une réponse enregistrée dans le cache ne doit être
175 envoyée qu'aux clients qui ont envoyé l'en-tête de requête
176 <code>Accept-Encoding</code> approprié. Ceci permet d'éviter l'envoi
177 d'un contenu comprimé à un client qui ne sera pas en mesure
178 de l'interpréter.</p>
180 <p>Si vous avez défini des exclusions spécifiques dépendant, par
181 exemple, de l'en-tête <code>User-Agent</code>, vous devez
182 ajouter manuellement des données à l'en-tête <code>Vary</code> afin
183 d'informer les mandataires des restrictions supplémentaires. Par
184 exemple, dans la configuration classique où l'addition du filtre
185 <code>DEFLATE</code> dépend du contenu de l'en-tête
186 <code>User-Agent</code>, vous devez spécifier :</p>
188 <highlight language="config">
189 Header append Vary User-Agent
192 <p>Si votre décision de comprimer le contenu dépend d'autres
193 informations que celles contenues dans les en-têtes de la requête
194 (par exemple la version HTTP), vous devez attribuer à l'en-tête
195 <code>Vary</code> la valeur <code>*</code>, ce qui permet d'empêcher
196 les mandataires compatibles de tout mettre en cache.</p>
198 <example><title>Exemple</title>
199 <highlight language="config">
205 <section id="precompressed"><title>Servir du contenu précompressé</title>
207 <p>Comme <module>mod_deflate</module> recompresse le contenu demandé à
208 chaque requête, il est possible de gagner en performances en
209 précompressant ce contenu, et en forçant mod_deflate à servir ce
210 contenu précompressé sans avoir à le recompresser à chaque requête.
211 Pour ce faire, utilisez une configuration du style :</p>
213 <highlight language="config">
214 <IfModule mod_headers.c>
215 # Servir des fichiers CSS compressés avec gzip, s'ils existent, et
216 # si le client accepte gzip.
217 RewriteCond "%{HTTP:Accept-encoding}" "gzip"
218 RewriteCond "%{REQUEST_FILENAME}\.gz" "-s"
219 RewriteRule "^(.*)\.css" "$1\.css\.gz" [QSA]
221 # Servir des fichiers JS compressés avec gzip, s'ils existent, et
222 # si le client accepte gzip.
223 RewriteCond "%{HTTP:Accept-encoding}" "gzip"
224 RewriteCond "%{REQUEST_FILENAME}\.gz" "-s"
225 RewriteRule "^(.*)\.js" "$1\.js\.gz" [QSA]
228 # Servir des types de contenus corrects, et empêcher mod_deflate
229 # d'effectuer un double gzip.
230 RewriteRule "\.css\.gz$" "-" [T=text/css,E=no-gzip:1]
231 RewriteRule "\.js\.gz$" "-" [T=text/javascript,E=no-gzip:1]
234 <FilesMatch "(\.js\.gz|\.css\.gz)$">
235 # Servir le type de codage correct.
236 Header append Content-Encoding gzip
238 # Force les mandataires à mettre en cache séparément les fichiers
239 # css/js gzippés & non gzippés.
240 Header append Vary Accept-Encoding
248 <name>DeflateFilterNote</name>
249 <description>Enregistre le taux de compression sous la forme d'une note
250 à des fins de journalisation</description>
251 <syntax>DeflateFilterNote [<var>type</var>] <var>nom de la note</var></syntax>
252 <contextlist><context>server config</context><context>virtual host</context>
256 <p>La directive <directive>DeflateFilterNote</directive> permet de
257 spécifier qu'une note à propos du taux de compression doit être
258 attachée à la requête. Le nom de la note est passé sous la forme
259 d'un argument de la directive. Vous pouvez utiliser cette note à des
260 fins statistiques en enregistrant sa valeur dans votre <a
261 href="../logs.html#accesslog">journal des accès</a>.</p>
263 <example><title>Exemple</title>
264 <highlight language="config">
265 DeflateFilterNote ratio
267 LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate
268 CustomLog "logs/deflate_log" deflate
272 <p>Pour extraire des informations plus précises de vos journaux,
273 vous pouvez utiliser l'argument <var>type</var> pour spécifier le
274 type de données de la note enregistrée dans le journal.
275 <var>type</var> peut prendre une des valeurs suivantes :</p>
278 <dt><code>Input</code></dt>
279 <dd>Enregistre dans la note la taille en octets du flux en entrée
282 <dt><code>Output</code></dt>
283 <dd>Enregistre dans la note la taille en octets du flux en sortie
286 <dt><code>Ratio</code></dt>
287 <dd>Enregistre le taux de compression (<code>sortie/entrée *
288 100</code>) dans la note. Il s'agit de la valeur par défaut si
289 l'argument <var>type</var> est omis.</dd>
292 <p>Vous pouvez donc configurer votre journalisation de la manière
295 <example><title>Journalisation détaillée</title>
296 <highlight language="config">
297 DeflateFilterNote Input instream
298 DeflateFilterNote Output outstream
299 DeflateFilterNote Ratio ratio
301 LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
302 CustomLog "logs/deflate_log" deflate
306 <seealso><module>mod_log_config</module></seealso>
310 <name>DeflateBufferSize</name>
311 <description>Taille du fragment que zlib devra comprimer en une seule
313 <syntax>DeflateBufferSize <var>valeur</var></syntax>
314 <default>DeflateBufferSize 8096</default>
315 <contextlist><context>server config</context><context>virtual host</context>
319 <p>La directive <directive>DeflateBufferSize</directive> permet de
320 spécifier la taille en octets du fragment que zlib devra comprimer
321 en une seule fois. Si la taille de la réponse compressée est supérieure à
322 celle spécifiée par cette directive, httpd passera à un mode d'encodage
323 fragmenté (l'en-tête HTTP <code>Transfer-Encoding</code> prend la valeur
324 <code>Chunked</code>), ceci ayant comme effet de bord de ne définir aucun
325 en-tête HTTP <code>Content-Length</code>. Il est important de connaître ce
326 comportement, particulièrement lorsque httpd travaille derrière des
327 mandataires inverses avec mise en cache, ou lorsque httpd est configuré pour
328 utiliser <module>mod_cache</module> et <module>mod_cache_disk</module> car
329 les réponses HTTP sans en-tête <code>Content-Length</code> peuvent ne pas
330 être mises en cache.</p>
335 <name>DeflateWindowSize</name>
336 <description>Taille de la fenêtre de compression zlib</description>
337 <syntax>DeflateWindowSize <var>valeur</var></syntax>
338 <default>DeflateWindowSize 15</default>
339 <contextlist><context>server config</context><context>virtual host</context>
343 <p>La directive <directive>DeflateWindowSize</directive> permet de
344 spécifier la fenêtre de compression zlib (une valeur comprise entre
345 1 et 15). En général, plus grande sera la taille de la fenêtre, plus
346 grand sera le taux de compression auquel on pourra s'attendre.</p>
352 <name>DeflateMemLevel</name>
353 <description>La quantité de mémoire utilisable par zlib pour la
354 compression</description>
355 <syntax>DeflateMemLevel <var>valeur</var></syntax>
356 <default>DeflateMemLevel 9</default>
357 <contextlist><context>server config</context><context>virtual host</context>
361 <p>La directive <directive>DeflateMemLevel</directive> permet de
362 spécifier la quantité de mémoire utilisable par zlib pour la
363 compression (une valeur comprise entre 1 et 9).</p>
368 <name>DeflateCompressionLevel</name>
369 <description>Le niveau de compression que nous appliquons à la
371 <syntax>DeflateCompressionLevel <var>valeur</var></syntax>
372 <default>La valeur par défaut de zlib</default>
373 <contextlist><context>server config</context><context>virtual host</context>
377 <p>La directive <directive>DeflateCompressionLevel</directive>
378 permet de spécifier le niveau de compression à utiliser ; plus
379 grande est la valeur, meilleure sera la compression, mais plus grand
380 sera aussi le temps CPU nécessaire pour effectuer le
382 <p>La valeur doit être comprise entre 1 (compression minimale) et 9
383 (compression maximale).</p>
388 <name>DeflateAlterETag</name>
389 <description>Comment l'en-tête sortant ETag doit être modifié au cours
390 de la compression</description>
391 <syntax>DeflateAlterETag AddSuffix|NoChange|Remove</syntax>
392 <default>DeflateAlterETag AddSuffix</default>
393 <contextlist><context>server config</context><context>virtual host</context>
397 <p>La directive <directive>DeflateAlterETag</directive> permet de
398 spécifier comment l'en-tête ETag doit être modifié lorsqu'une
399 réponse est compressée.</p>
402 <dd><p>Ajoute la méthode de compression à la fin de l'en-tête, ce
403 qui a pour effet d'attribuer un en-tête ETag unique aux
404 représentations compressées et non compressées. C'est l'option par
405 défaut depuis la version 2.4.0, mais empêche de servir des
406 codes d'état "HTTP Not Modified" (304) en réponse aux requêtes pour un
407 contenu compressé.</p></dd>
409 <dd><p>Ne modifie pas l'en-tête ETag dans une réponse compressée.
411 défaut avant la version 2.4.0, mais cela ne respectait pas la
412 préconisation HTTP/1.1 selon laquelle chaque représentation de la
413 même ressource doit posséder un en-tête ETag unique.</p></dd>
415 <dd><p>Supprime l'en-tête ETag dans les réponses compressées, ce qui
416 a pour effet de rendre impossibles certaines requêtes
417 conditionnelles, mais permet d'éviter les inconvénients des options
418 précédentes.</p></dd>
424 <name>DeflateInflateLimitRequestBody</name>
425 <description>Taille maximale des corps de requête décompressés</description>
426 <syntax>DeflateInflateLimitRequestBody<var>value</var></syntax>
427 <default>Aucune limite, mais LimitRequestBody s'applique après la
428 compression</default>
429 <contextlist><context>server config</context><context>virtual host</context>
430 <context>directory</context><context>.htaccess</context></contextlist>
431 <compatibility>Disponible à partir de la version 2.4.10 du serveur HTTP
432 Apache</compatibility>
436 <directive>DeflateInflateLimitRequestBody</directive> permet de
437 spécifier la taille maximale d'un corps de requête décompressé. Si
438 elle n'est pas définie, c'est la valeur de la directive <directive
439 module="core">LimitRequestBody</directive> qui s'applique au corps
440 de requête décompressé.</p>
445 <name>DeflateInflateRatioLimit</name>
446 <description>Ratio de décompression maximum pour les corps de requêtes</description>
447 <syntax>DeflateInflateRatioLimit <var>value</var></syntax>
448 <default>200</default>
449 <contextlist><context>server config</context><context>virtual host</context>
450 <context>directory</context><context>.htaccess</context></contextlist>
451 <compatibility>Disponible à partir de la version 2.4.10 du serveur HTTP
452 Apache</compatibility>
455 <p>La directive <directive>DeflateInflateRatioLimit</directive>
456 permet de définir le ratio maximum entre la taille d'un corps de
457 requête compressé et sa taille décompressée. Ce ratio est vérifié au
459 l'arrivée du corps de requête, et s'il est dépassé plus de
460 <directive>DeflateInflateRatioBurst</directive> fois, le traitement
461 de la requête est interrompu.</p>
466 <name>DeflateInflateRatioBurst</name>
467 <description>Nombre maximal de fois que le ratio de décompression d'un
468 corps de requête peut être dépassé</description>
469 <syntax>DeflateInflateRatioBurst <var>value</var></syntax>
471 <contextlist><context>server config</context><context>virtual host</context>
472 <context>directory</context><context>.htaccess</context></contextlist>
473 <compatibility>Disponible à partir de la version 2.4.10 du serveur HTTP
474 Apache</compatibility>
477 <p>La directive <directive>DeflateInflateRatioBurst</directive>
478 permet de spécifier le nombre maximal de fois que la valeur de la
479 directive <directive>DeflateInflateRatioLimit</directive> peut être
480 dépassé avant l'arrêt du traitement de la requête.</p>