| <?xml version="1.0"?> |
| <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd"> |
| <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?> |
| <!-- English Revision : 966890 --> |
| <!-- French translation : Lucien GENTIS --> |
| <!-- Reviewed by : Vincent Deffontaines --> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <modulesynopsis metafile="mod_deflate.xml.meta"> |
| |
| <name>mod_deflate</name> |
| <description>Comprime le contenu avant de le servir au |
| client</description> |
| <status>Extension</status> |
| <sourcefile>mod_deflate.c</sourcefile> |
| <identifier>deflate_module</identifier> |
| |
| <summary> |
| <p>Le module <module>mod_deflate</module> implémente le filtre de |
| sortie <code>DEFLATE</code> qui permet de comprimer la sortie de |
| votre serveur avant de l'envoyer au client sur le réseau.</p> |
| </summary> |
| <seealso><a href="../filter.html">Les filtres</a></seealso> |
| |
| <section id="recommended"><title>Exemples de configurations</title> |
| <p>Voici un exemple simple de configuration pour les |
| impatients.</p> |
| |
| <example><title>Ne comprime que certains types de documents</title> |
| AddOutputFilterByType DEFLATE text/html text/plain text/xml |
| </example> |
| |
| <p>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.</p> |
| |
| <example><title>Comprime tout, sauf les images</title> |
| <Location /><br /> |
| <indent> |
| # Insère le filtre<br /> |
| SetOutputFilter DEFLATE<br /> |
| <br /> |
| # Netscape 4.x a quelques problèmes ...<br /> |
| BrowserMatch ^Mozilla/4 gzip-only-text/html<br /> |
| <br /> |
| # Netscape 4.06-4.08 ont d'autres problèmes<br /> |
| BrowserMatch ^Mozilla/4\.0[678] no-gzip<br /> |
| <br /> |
| # MSIE se fait passer pour Netscape, mais ça marche<br /> |
| BrowserMatch \bMSIE !no-gzip !gzip-only-text/html<br /> |
| # Ne pas comprimer les images<br /> |
| SetEnvIfNoCase Request_URI \<br /> |
| <indent> |
| \.(?:gif|jpe?g|png)$ no-gzip dont-vary<br /> |
| </indent> |
| <br /> |
| # On s'assure que les mandataires ne servent pas le mauvais |
| # contenu<br /> |
| Header append Vary User-Agent env=!dont-vary<br /> |
| </indent> |
| </Location> |
| </example> |
| |
| </section> |
| |
| <section id="enable"><title>Activation de la compression</title> |
| |
| <section id="output"><title>Compression de la sortie</title> |
| <p>La compression est implémentée par le <a |
| href="../filter.html">filtre</a> <code>DEFLATE</code>. La |
| directive suivante active la compression des documents dans le |
| conteneur où elle est placée :</p> |
| |
| <example> |
| SetOutputFilter DEFLATE |
| </example> |
| |
| <p>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 <code>gzip-only-text/html</code> à <code>1</code> |
| pour ne permettre que la compression des fichiers html (voir |
| ci-dessous). Si vous définissez cette note à <em>toute autre |
| valeur que <code>1</code></em>, elle sera ignorée.</p> |
| |
| <p>Si vous voulez limiter la compression à certains types MIME |
| particuliers, vous pouvez utiliser la directive <directive |
| module="mod_filter">AddOutputFilterByType</directive>. Voici un exemple |
| où la compression n'est activée que pour les fichiers html de la |
| documentation d'Apache :</p> |
| |
| <example> |
| <Directory "/racine-de-votre-serveur/manual"><br /> |
| <indent> |
| AddOutputFilterByType DEFLATE text/html<br /> |
| </indent> |
| </Directory> |
| </example> |
| |
| <p>Pour les navigateurs qui ont des problèmes avec la compression |
| de tous les types de fichiers, vous pouvez utiliser la directive |
| <directive module="mod_setenvif">BrowserMatch</directive> pour |
| définir la note <code>no-gzip</code>, pour le navigateur |
| considéré, de façon à ce qu'aucune compression ne soit effectuée. |
| Vous pouvez combiner <code>no-gzip</code> avec |
| <code>gzip-only-text/html</code> 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'<a |
| href="#recommended">exemple de configuration</a> de la section |
| précédente :</p> |
| |
| <example> |
| BrowserMatch ^Mozilla/4 gzip-only-text/html<br /> |
| BrowserMatch ^Mozilla/4\.0[678] no-gzip<br /> |
| BrowserMatch \bMSIE !no-gzip !gzip-only-text/html |
| </example> |
| |
| <p>Tout d'abord, on recherche un en-tête <code>User-Agent</code> |
| qui signale un navigateur Netscape version 4.x. Ces versions ne |
| gèrent pas la compression des types de fichiers autres que |
| <code>text/html</code>. 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.</p> |
| |
| <p>La troisième directive <directive |
| module="mod_setenvif">BrowserMatch</directive> 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" (<code>\b</code> |
| signifie "par mots entiers") dans l'en-tête |
| <code>User-Agent</code>, et si elle est trouvée, on annule les |
| restrictions définies auparavant.</p> |
| |
| <note><title>Note</title> |
| Le filtre <code>DEFLATE</code> est toujours inséré après les |
| filtres RESOURCE comme PHP ou SSI. Il n'affecte jamais les |
| sous-requêtes internes. |
| </note> |
| <note><title>Note</title> |
| La variable d'environnement <code>force-gzip</code>, définie à |
| l'aide de la directive <directive |
| module="core">SetEnv</directive>, permet d'ignorer la |
| configuration de votre navigateur quant aux codages acceptés, et |
| d'envoyer sans condition une sortie comprimée. |
| </note> |
| |
| </section> |
| <section id="inflate"><title>Décompression de la sortie</title> |
| <p>Le module <module>mod_deflate</module> 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 |
| <code>INFLATE</code> dans la chaîne de filtrage en sortie via la |
| directive <directive module="core">SetOutputFilter</directive> ou |
| <directive module="mod_mime">AddOutputFilter</directive>, comme |
| dans l'exemple suivant :</p> |
| |
| <example> |
| <Location /dav-area><br /> |
| <indent> |
| ProxyPass http://example.com/<br /> |
| SetOutputFilter INFLATE<br /> |
| </indent> |
| </Location> |
| </example> |
| |
| <p>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. |
| </p> |
| |
| </section> |
| <section id="input"><title>Décompression de l'entrée</title> |
| <p>Le module <module>mod_deflate</module> 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 |
| <code>DEFLATE</code> dans la chaîne de filtrage en entrée via la |
| directive <directive module="core">SetInputFilter</directive> ou |
| <directive module="mod_mime">AddInputFilter</directive>, comme |
| dans l'exemple suivant :</p> |
| |
| <example> |
| <Location /dav-area><br /> |
| <indent> |
| SetInputFilter DEFLATE<br /> |
| </indent> |
| </Location> |
| </example> |
| |
| <p>Désormais, si une requête contient un en-tête |
| <code>Content-Encoding: gzip</code>, 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 <a |
| href="http://www.webdav.org">WebDAV</a>.</p> |
| |
| <note type="warning"><title>Note à propos de l'en-tête |
| <code>Content-Length</code></title> |
| <p>Si vous évaluez vous-même la taille du corps de requête, |
| <em>ne faites pas confiance à l'en-tête |
| <code>Content-Length</code>!</em> L'en-tête |
| Content-Length indique la longueur des données en provenance du |
| client, et <em>non</em> la quantité d'octets que représente le |
| flux de données décompressé.</p> |
| </note> |
| </section> |
| </section> |
| |
| <section id="proxies"><title>Prise en compte des serveurs mandataires</title> |
| |
| <p>Le module <module>mod_deflate</module> envoie un en-tête de |
| réponse HTTP <code>Vary: Accept-Encoding</code> 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 |
| <code>Accept-Encoding</code> approprié. Ceci permet d'éviter l'envoi |
| d'un contenu comprimé à un client qui ne sera pas en mesure |
| de l'interpréter.</p> |
| |
| <p>Si vous avez défini des exclusions spécifiques dépendant, par |
| exemple, de l'en-tête <code>User-Agent</code>, vous devez |
| ajouter manuellement des données à l'en-tête <code>Vary</code> afin |
| d'informer les mandataires des restrictions supplémentaires. Par |
| exemple, dans la configuration classique où l'addition du filtre |
| <code>DEFLATE</code> dépend du contenu de l'en-tête |
| <code>User-Agent</code>, vous devez spécifier :</p> |
| |
| <example> |
| Header append Vary User-Agent |
| </example> |
| |
| <p>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 |
| <code>Vary</code> la valeur <code>*</code>, ce qui permet d'empêcher |
| les mandataires compatibles de tout mettre en cache.</p> |
| |
| <example><title>Exemple</title> |
| Header set Vary * |
| </example> |
| </section> |
| |
| <directivesynopsis> |
| <name>DeflateFilterNote</name> |
| <description>Enregistre le taux de compression sous la forme d'une note |
| à des fins de journalisation</description> |
| <syntax>DeflateFilterNote [<var>type</var>] <var>nom de la note</var></syntax> |
| <contextlist><context>server config</context><context>virtual host</context> |
| </contextlist> |
| <compatibility><var>type</var> est disponible depuis la version 2.0.45 |
| d'Apache</compatibility> |
| |
| <usage> |
| <p>La directive <directive>DeflateFilterNote</directive> 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 <a |
| href="../logs.html#accesslog">journal des accès</a>.</p> |
| |
| <example><title>Exemple</title> |
| DeflateFilterNote ratio<br /> |
| <br /> |
| LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br /> |
| CustomLog logs/deflate_log deflate |
| </example> |
| |
| <p>Pour extraire des informations plus précises de vos journaux, |
| vous pouvez utiliser l'argument <var>type</var> pour spécifier le |
| type de données de la note enregistrée dans le journal. |
| <var>type</var> peut prendre une des valeurs suivantes :</p> |
| |
| <dl> |
| <dt><code>Input</code></dt> |
| <dd>Enregistre dans la note la taille en octets du flux en entrée |
| du filtre.</dd> |
| |
| <dt><code>Output</code></dt> |
| <dd>Enregistre dans la note la taille en octets du flux en sortie |
| du filtre.</dd> |
| |
| <dt><code>Ratio</code></dt> |
| <dd>Enregistre le taux de compression (<code>sortie/entrée * |
| 100</code>) dans la note. Il s'agit de la valeur par défaut si |
| l'argument <var>type</var> est omis.</dd> |
| </dl> |
| |
| <p>Vous pouvez donc configurer votre journalisation de la manière |
| suivante :</p> |
| |
| <example><title>Journalisation détaillée</title> |
| DeflateFilterNote Input instream<br /> |
| DeflateFilterNote Output outstream<br /> |
| DeflateFilterNote Ratio ratio<br /> |
| <br /> |
| LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate<br /> |
| CustomLog logs/deflate_log deflate |
| </example> |
| </usage> |
| <seealso><module>mod_log_config</module></seealso> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| <name>DeflateBufferSize</name> |
| <description>Taille du fragment que zlib devra comprimer en une seule |
| fois</description> |
| <syntax>DeflateBufferSize <var>valeur</var></syntax> |
| <default>DeflateBufferSize 8096</default> |
| <contextlist><context>server config</context><context>virtual host</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>DeflateBufferSize</directive> permet de |
| spécifier la taille en octets du fragment que zlib devra comprimer |
| en une seule fois.</p> |
| </usage> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| <name>DeflateWindowSize</name> |
| <description>Taille de la fenêtre de compression zlib</description> |
| <syntax>DeflateWindowSize <var>valeur</var></syntax> |
| <default>DeflateWindowSize 15</default> |
| <contextlist><context>server config</context><context>virtual host</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>DeflateWindowSize</directive> 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.</p> |
| </usage> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| |
| <name>DeflateMemLevel</name> |
| <description>La quantité de mémoire utilisable par zlib pour la |
| compression</description> |
| <syntax>DeflateMemLevel <var>valeur</var></syntax> |
| <default>DeflateMemLevel 9</default> |
| <contextlist><context>server config</context><context>virtual host</context> |
| </contextlist> |
| |
| <usage> |
| <p>La directive <directive>DeflateMemLevel</directive> permet de |
| spécifier la quantité de mémoire utilisable par zlib pour la |
| compression (une valeur comprise entre 1 et 9).</p> |
| </usage> |
| </directivesynopsis> |
| |
| <directivesynopsis> |
| <name>DeflateCompressionLevel</name> |
| <description>Le niveau de compression que nous appliquons à la |
| sortie</description> |
| <syntax>DeflateCompressionLevel <var>valeur</var></syntax> |
| <default>La valeur par défaut de zlib</default> |
| <contextlist><context>server config</context><context>virtual host</context> |
| </contextlist> |
| <compatibility>Cette directive est disponible depuis la version 2.0.45 |
| d'Apache</compatibility> |
| |
| <usage> |
| <p>La directive <directive>DeflateCompressionLevel</directive> |
| 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.</p> |
| <p>La valeur doit être comprise entre 1 (compression minimale) et 9 |
| (compression maximale).</p> |
| </usage> |
| </directivesynopsis> |
| |
| |
| </modulesynopsis> |
| |