<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="fr"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>mod_filter - Serveur HTTP Apache Version 2.4</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet">
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size">
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css"><link rel="stylesheet" type="text/css" href="../style/css/prettify.css">
<script src="../style/scripts/prettify.min.js">
</script>

<link href="../images/favicon.png" rel="shortcut icon"></head>
<body>
<div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p>
<p class="apache">Serveur HTTP Apache Version 2.4</p>
<img alt="" src="../images/feather.png"></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif"></a></div>
<div id="path">
<a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="https://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Module Apache mod_filter</h1>
<button aria-label="Toggle language list" class="lang-toggle"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="16" width="16"><circle r="10" cy="12" cx="12"/><line y2="12" x2="22" y1="12" x1="2"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></button>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_filter.html" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a></p>
</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Module de configuration de filtre intelligent sensible au
contexte</td></tr>
<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur&nbsp;de&nbsp;Module:</a></th><td>filter_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Fichier&nbsp;Source:</a></th><td>mod_filter.c</td></tr>
<tr><th><a href="module-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Versions 2.1 et sup&eacute;rieures</td></tr></table>
<h3>Sommaire</h3>

    <p>Ce module permet une configuration intelligente et d&eacute;pendant du
    contexte des filtres de contenu en sortie. Par exemple, Apache peut
    &ecirc;tre configur&eacute; pour faire traiter diff&eacute;rents types de contenus par
    diff&eacute;rents filtres, m&ecirc;me lorsque le type de contenu n'est pas connu
    &agrave; l'avance (par exemple dans un serveur mandataire).</p>

    <p>Le fonctionnement de <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> consiste &agrave;
    introduire des branchements dans la cha&icirc;ne de filtrage. Plut&ocirc;t que
    d'ins&eacute;rer directement des filtres dans la cha&icirc;ne, on ins&egrave;re un
    s&eacute;lecteur de filtre qui va effectuer un branchement conditionnel
    vers un fournisseur de filtre. <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> peut
    utiliser tout filtre de contenu comme fournisseur ; aucune
    modification des modules de filtrage existants n'est n&eacute;cessaire
    (bien qu'il soit tout de m&ecirc;me possible de les simplifier).</p>
</div>
<div id="quickview"><h3>Sujets</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif"> <a href="#smart">Filtrage intelligent</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#terms">D&eacute;clarations de filtres, fournisseurs et
cha&icirc;nes</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#config">Configuration de la cha&icirc;ne de
filtrage</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#errordocs">Filtrage et statut de la r&eacute;ponse</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#upgrade">Mise &agrave; jour depuis une configuration du
serveur HTTP Apache 2.2</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#examples">Exemples</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#protocol">Gestion de protocole</a></li>
</ul><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif"> <a href="#addoutputfilterbytype">AddOutputFilterByType</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#filterchain">FilterChain</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#filterdeclare">FilterDeclare</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#filterprotocol">FilterProtocol</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#filterprovider">FilterProvider</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#filtertrace">FilterTrace</a></li>
</ul>
<h3>Traitement des bugs</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">Journal des modifications de httpd</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_filter">Probl&egrave;mes connus</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_filter">Signaler un bug</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="smart">Filtrage intelligent <a title="Lien permanent" href="#smart" class="permalink">&para;</a></h2>
    <p>Dans le mod&egrave;le de filtrage traditionnel, les filtres sont ins&eacute;r&eacute;s
    sans condition &agrave; l'aide de la directive <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code> et des directives
    apparent&eacute;es. Chaque filtre doit ensuite d&eacute;terminer s'il doit
    s'ex&eacute;cuter ou non, et les administrateurs du serveur disposent de
    peu de souplesse pour faire en sorte que la cha&icirc;ne soit trait&eacute;e de
    mani&egrave;re dynamique.</p>

    <p><code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>, &agrave; l'oppos&eacute;, fournit aux
    administrateurs du serveur un grand degr&eacute; de souplesse pour
    configurer la cha&icirc;ne de filtrage. Concr&egrave;tement, la d&eacute;cision
    d'ins&eacute;rer un filtre peut &ecirc;tre prise en fonction d'une <a href="../expr.html">expression</a> bool&eacute;enne complexe. Ceci
    g&eacute;n&eacute;ralise le fonctionnement relativement souple de la directive
    <code class="directive">AddOutputFilterByType</code>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="terms">D&eacute;clarations de filtres, fournisseurs et
cha&icirc;nes <a title="Lien permanent" href="#terms" class="permalink">&para;</a></h2>
    <p class="figure">
    <img src="../images/mod_filter_old.gif" width="160" height="310" alt="[Cette image illustre le mod&egrave;le de filtrage traditionnel]"><br>
    <dfn>Figure 1:</dfn> Le mod&egrave;le de filtrage traditionnel</p>

    <p>Dans le mod&egrave;le traditionnel, les filtres en sortie constituent
    une simple cha&icirc;ne s'&eacute;tendant depuis le g&eacute;n&eacute;rateur de contenu (ou
    gestionnaire) jusqu'au client. Ce fonctionnement peut convenir s'il
    permet d'atteindre le but recherch&eacute;, mais pose
    probl&egrave;me lorsque cette cha&icirc;ne doit &ecirc;tre configur&eacute;e dynamiquement en
    fonction de la sortie du gestionnaire.</p>

    <p class="figure">
    <img src="../images/mod_filter_new.gif" width="423" height="331" alt="[Cette image illustre le mod&egrave;le de fonctionnement de     mod_filter]"><br>
    <dfn>Figure 2:</dfn> Le mod&egrave;le de fonctionnement de
    <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></p>

    <p>Le fonctionnement de <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> consiste &agrave;
    introduire des branchements dans la cha&icirc;ne de filtrage. Plut&ocirc;t que
    d'ins&eacute;rer directement des filtres dans la cha&icirc;ne, on ins&egrave;re un
    s&eacute;lecteur de filtre qui va effectuer un branchement conditionnel
    vers un fournisseur de filtre. <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> peut
    utiliser tout filtre de contenu comme fournisseur ; aucune
    modification des modules de filtrage existants n'est n&eacute;cessaire
    (bien qu'il soit tout de m&ecirc;me possible de les simplifier). Il peut y
    avoir plusieurs fournisseurs pour un seul filtre, mais un seul
    fournisseur sera choisi pour chaque requ&ecirc;te.</p>

    <p>Une cha&icirc;ne de filtrage peut comporter autant d'instances du
    s&eacute;lecteur de filtre que l'on souhaite, chacune d'entre elles pouvant
    disposer de plusieurs fournisseurs. Un s&eacute;lecteur de filtre poss&eacute;dant
    un seul fournisseur dont le choix est inconditionnel constitue un
    cas particulier : cette situation est &eacute;quivalente &agrave; l'insertion
    directe du filtre dans la cha&icirc;ne.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="config">Configuration de la cha&icirc;ne de
filtrage <a title="Lien permanent" href="#config" class="permalink">&para;</a></h2>
    <p>Trois &eacute;tapes sont n&eacute;cessaires pour configurer une cha&icirc;ne de
    filtrage avec <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>. Voir ci-dessous la
    description d&eacute;taill&eacute;e des directives.</p>

    <dl>
    <dt>D&eacute;claration des filtres</dt>
    <dd>La directive <code class="directive"><a href="#filterdeclare">FilterDeclare</a></code> permet de d&eacute;clarer un
    filtre en lui assignant un nom et un type. Elle n'est obligatoire
    que si le filtre n'est pas du type par d&eacute;faut
    AP_FTYPE_RESOURCE.</dd>

    <dt>Enregistrement des fournisseurs</dt>
    <dd>La directive <code class="directive"><a href="#filterprovider">FilterProvider</a></code> permet d'associer un
    fournisseur &agrave; un filtre. Le filtre a &eacute;t&eacute; &eacute;ventuellement d&eacute;clar&eacute; &agrave;
    l'aide de la directive <code class="directive"><a href="#filterdeclare">FilterDeclare</a></code> ; si ce n'est pas le cas, FilterProvider
    va le d&eacute;clarer implicitement avec le type par d&eacute;faut
    AP_FTYPE_RESOURCE. Le fournisseur doit avoir &eacute;t&eacute; enregistr&eacute; &agrave;
    l'aide de <code>ap_register_output_filter</code> par un module
    quelconque. Le dernier argument de la directive <code class="directive"><a href="#filterprovider">FilterProvider</a></code> est une expression :
    le fournisseur s'ex&eacute;cutera pour une requ&ecirc;te si et seulement si
    l'expression est &eacute;valu&eacute;e vraie. L'expression peut &eacute;valuer une
    requ&ecirc;te HTTP ou les en-t&ecirc;tes de la r&eacute;ponse, des variables
    d'environnement, ou le gestionnaire utilis&eacute; par cette requ&ecirc;te. &Agrave; la
    diff&eacute;rence des version pr&eacute;c&eacute;dentes, mod_filter supporte d&eacute;sormais
    les expressions complexes associant des crit&egrave;res multiples au moyen
    d'une logique AND / OR (&amp;&amp; / ||) et de parenth&egrave;ses. Pour les
    d&eacute;tails sur la syntaxe de l'expression, voir la <a href="../expr.html">documentation sur ap_expr</a>.</dd>

    <dt>Configuration de la cha&icirc;ne de filtrage</dt>
    <dd>Les directives ci-dessus permettent d'&eacute;laborer les &eacute;l&eacute;ments
    d'une cha&icirc;ne de filtrage intelligente, mais pas de les configurer en
    vue de leur ex&eacute;cution. La directive <code class="directive"><a href="#filterchain">FilterChain</a></code> &eacute;labore une cha&icirc;ne de filtrage &agrave;
    partir de filtres intelligents d&eacute;clar&eacute;s, permettant avec souplesse
    d'ins&eacute;rer des filtres au d&eacute;but ou &agrave; la fin de la cha&icirc;ne, de
    supprimer un filtre ou m&ecirc;me la cha&icirc;ne compl&egrave;te.</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="errordocs">Filtrage et statut de la r&eacute;ponse <a title="Lien permanent" href="#errordocs" class="permalink">&para;</a></h2>
    <p>Normalement, mod_filter n'applique les filtres qu'aux r&eacute;ponses
    poss&eacute;dant un statut HTTP 200 (OK). Pour pouvoir filtrer des
    documents poss&eacute;dant un autre statut, vous devez d&eacute;finir la variable
    d'environnement <var>filter-errordocs</var>, les r&eacute;ponses &eacute;tant
    alors filtr&eacute;es sans se pr&eacute;occuper de leur statut. Pour d&eacute;finir ce
    comportement de mani&egrave;re plus fine, vous pouvez utiliser des
    conditions dans la directive
    <code class="directive">FilterProvider</code>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="upgrade">Mise &agrave; jour depuis une configuration du
serveur HTTP Apache 2.2 <a title="Lien permanent" href="#upgrade" class="permalink">&para;</a></h2>
    <p>La directive <code class="directive"><a href="#filterprovider">FilterProvider</a></code> a &eacute;t&eacute; modifi&eacute;e par
    rapport &agrave; httpd 2.2 : les arguments <var>match</var> et
    <var>dispatch</var> ont &eacute;t&eacute; remplac&eacute;s par l'argument unique
    <var>expression</var> plus polyvalent. En g&eacute;n&eacute;ral, il est possible
    de convertir une paire match/dispatch vers les deux c&ocirc;t&eacute;s d'une
    expression, de la mani&egrave;re suivante :</p>
    <div class="example"><p><code>"dispatch = 'match'"</code></p></div>
    <p>Les en-t&ecirc;tes de requ&ecirc;te et de r&eacute;ponse et les variables
    d'environnement sont maintenant interpr&eacute;t&eacute;s selon les syntaxes
    respectives <var>%{req:foo}</var>, <var>%{resp:foo}</var> et
    <var>%{env:foo}</var>. Les variables <var>%{HANDLER}</var> et
    <var>%{CONTENT_TYPE}</var> sont &eacute;galement support&eacute;es.</p>
    <p>Notez que l'&eacute;valuation de l'expression ne supporte plus les
    comparaisons de sous-cha&icirc;nes. Ces derni&egrave;res peuvent
    &ecirc;tre remplac&eacute;es par des comparaisons d'expressions rationnelles.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="examples">Exemples <a title="Lien permanent" href="#examples" class="permalink">&para;</a></h2>
    <dl>
    <dt>Inclusions c&ocirc;t&eacute; serveur (SSI)</dt>
    <dd>Un exemple simple de remplacement de la directive <code class="directive"><a href="../mod/core.html#addoutputfilterbytype">AddOutputFilterByType</a></code>
    <pre class="prettyprint lang-config">FilterDeclare SSI
FilterProvider SSI INCLUDES "%{CONTENT_TYPE} =~ m|^text/html|"
FilterChain SSI</pre>

    </dd>

    <dt>Inclusions c&ocirc;t&eacute; serveur (SSI)</dt>
    <dd>M&ecirc;me exemple que ci-dessus, mais envoi vers un gestionnaire
    (comportement classique des SSI ; les fichiers .shtml sont
    trait&eacute;s).
    <pre class="prettyprint lang-config">FilterProvider SSI INCLUDES "%{HANDLER} = 'server-parsed'"
FilterChain SSI</pre>

    </dd>

    <dt>&Eacute;mulation de mod_gzip avec mod_deflate</dt>
    <dd>Insertion du filtre INFLATE seulement si l'en-t&ecirc;te
    Accept-Encoding a une valeur autre que "gzip". Ce filtre s'ex&eacute;cute
    avec le type ftype CONTENT_SET.
    <pre class="prettyprint lang-config">FilterDeclare gzip CONTENT_SET
FilterProvider gzip inflate "%{req:Accept-Encoding} !~ /gzip/"
FilterChain gzip</pre>

    </dd>

    <dt>Diminution de la r&eacute;solution d'une image</dt>
    <dd>Supposons que nous voulions r&eacute;duire la r&eacute;solution de toutes les
    images web, et que nous disposions de filtres pour les images GIF,
    JPEG et PNG.
    <pre class="prettyprint lang-config">FilterProvider unpack jpeg_unpack "%{CONTENT_TYPE} = 'image/jpeg'"
FilterProvider unpack gif_unpack  "%{CONTENT_TYPE} = 'image/gif'"
FilterProvider unpack png_unpack  "%{CONTENT_TYPE} = 'image/png'"

FilterProvider downsample downsample_filter "%{CONTENT_TYPE} = m|^image/(jpeg|gif|png)|"
FilterProtocol downsample "change=yes"

FilterProvider repack jpeg_pack "%{CONTENT_TYPE} = 'image/jpeg'"
FilterProvider repack gif_pack  "%{CONTENT_TYPE} = 'image/gif'"
FilterProvider repack png_pack  "%{CONTENT_TYPE} = 'image/png'"
&lt;Location "/image-filter"&gt;
    FilterChain unpack downsample repack
&lt;/Location&gt;</pre>

    </dd>
    </dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="protocol">Gestion de protocole <a title="Lien permanent" href="#protocol" class="permalink">&para;</a></h2>
    <p>Historiquement, tout filtre doit s'assurer que toute modification
    qu'il effectue est correctement repr&eacute;sent&eacute;e dans les en-t&ecirc;tes de la
    r&eacute;ponse HTTP, et qu'il ne s'ex&eacute;cutera pas si cette ex&eacute;cution
    r&eacute;sultait en une modification interdite. Ceci impose aux auteurs de
    filtres la corv&eacute;e de r&eacute;impl&eacute;menter certaines fonctionnalit&eacute;s
    communes dans chaque filtre :</p>

    <ul>
    <li>De nombreux filtres modifient les contenus, et de ce fait
    invalident les balises de ces contenus, leur somme de
    contr&ocirc;le, leur condens&eacute; (hash) existant, ainsi que leur
    taille.</li>

    <li>Les filtres qui n&eacute;cessitent une r&eacute;ponse enti&egrave;re et non tronqu&eacute;e en
    entr&eacute;e, doivent s'assurer qu'il n'ont pas re&ccedil;u une r&eacute;ponse &agrave; une
    requ&ecirc;te partielle.</li>

    <li>Les filtres qui modifient la sortie d'un autre filtre doivent
    s'assurer qu'ils ne violent pas la directive d'un en-t&ecirc;te
    <code>Cache-Control: no-transform</code> &eacute;ventuel.</li>

    <li>Les filtres peuvent agir sur des r&eacute;ponses de fa&ccedil;on &agrave; ce qu'elles
    ne puissent plus &ecirc;tre mises en cache.</li>
    </ul>

    <p><code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> a pour but de g&eacute;rer de mani&egrave;re
    g&eacute;n&eacute;rale ces d&eacute;tails de l'impl&eacute;mentation des filtres, r&eacute;duisant par
    l&agrave;-m&ecirc;me la complexit&eacute; des modules de filtrage de contenu. Le
    travail permettant d'atteindre ce but est cependant toujours en
    cours ; la directive <code class="directive"><a href="#filterprotocol">FilterProtocol</a></code>
    impl&eacute;mente certaines de ces fonctionnalit&eacute;s &agrave; des fins de
    compatibilit&eacute; ascendante avec les modules d'Apache 2.0. Pour les
    versions 2.1 et sup&eacute;rieures de httpd, les API
    <code>ap_register_output_filter_protocol</code> et
    <code>ap_filter_protocol</code> permettent aux modules de filtrage
    de d&eacute;finir leurs propres comportements.</p>

    <p>Cependant, <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> ne doit pas interf&eacute;rer
    avec un filtre qui g&egrave;re d&eacute;j&agrave; tous les aspects du protocole. Par
    d&eacute;faut (c'est &agrave; dire en l'absence de toute directive <code class="directive"><a href="#filterprotocol">FilterProtocol</a></code>),
    <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> ne modifiera donc pas les en-t&ecirc;tes.</p>

    <p>Au moment o&ugrave; ces lignes sont &eacute;crites, cette fonctionnalit&eacute; a &eacute;t&eacute;
    tr&egrave;s peu test&eacute;e, car les modules d'usage courant ont &eacute;t&eacute; con&ccedil;us pour
    fonctionner avec httpd 2.0. Les modules qui l'utilisent devront donc
    l'exp&eacute;rimenter avec pr&eacute;cautions.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="addoutputfilterbytype">Directive <span id="AddOutputFilterByType">AddOutputFilterByType</span> <a title="Lien permanent" href="#addoutputfilterbytype" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>assigne un filtre en sortie pour un type de m&eacute;dia
particulier</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>AddOutputFilterByType <var>filtre</var>[;<var>filtre</var>...]
<var>type_de_m&eacute;dia</var> [<var>type_de_m&eacute;dia</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Surcharges autoris&eacute;es:</a></th><td>FileInfo</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_filter</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Pr&eacute;sentait de s&eacute;v&egrave;res limitations avant d'&ecirc;tre d&eacute;plac&eacute; dans
<code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> dans la version 2.3.7</td></tr>
</table>
    <p>Cette directive active un <a href="../filter.html">filtre</a> en sortie particulier pour une
    requ&ecirc;te en fonction du <a class="glossarylink" href="../glossary.html#type de m%C3%A9dia" title="voir glossaire">type de m&eacute;dia</a> de la r&eacute;ponse.</p>

    <p>L'exemple suivant active le filtre <code>DEFLATE</code> qui est
    fourni par le module <code class="module"><a href="../mod/mod_deflate.html">mod_deflate</a></code>. Il va compresser
    toute sortie dont le type MIME est <code>text/html</code> ou
    <code>text/plain</code> avant de l'envoyer au client.</p>

    <pre class="prettyprint lang-config">AddOutputFilterByType DEFLATE text/html text/plain</pre>


    <p>Si vous voulez assigner plusieurs filtres au contenu, leurs noms
    doivent &ecirc;tre s&eacute;par&eacute;s par des points-virgules. On peut aussi utiliser
    une directive <code class="directive">AddOutputFilterByType</code> pour
    chacun des filtres &agrave; assigner.</p>

    <p>La configuration ci-dessous impose le traitement de toute sortie
    de script dont le type MIME est <code>text/html</code> en premier
    lieu par le filtre <code>INCLUDES</code>, puis par le filtre
    <code>DEFLATE</code>.</p>

    <pre class="prettyprint lang-config">&lt;Location "/cgi-bin/"&gt;
    Options Includes
    AddOutputFilterByType INCLUDES;DEFLATE text/html
&lt;/Location&gt;</pre>


    <p>Notez que les directives <code class="directive">AddOutputFilterByType</code>
    situ&eacute;es dans un m&ecirc;me contexte sont additives, mais que leur d&eacute;finition dans
    un contexte plus sp&eacute;cifique (tel qu'une section <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>, <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ou <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>) remplacera &mdash;&nbsp;ne s'ajoutera pas &agrave;
    &mdash;&nbsp;toutes d&eacute;finitions h&eacute;rit&eacute;es d'un contexte plus g&eacute;n&eacute;ral. Ce comportement
    est identique &agrave; celui de la directive <code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code>.</p>

    <pre class="prettyprint lang-config"># Server context: compress text/html and text/plain
AddOutputFilterByType DEFLATE text/html text/plain
&lt;VirtualHost *:80&gt;
    # Remplace la d&eacute;finition globale pour ce serveur virtuel;
    # seuls les contenus de type text/css seront compress&eacute;s ici :
    AddOutputFilterByType DEFLATE text/css
&lt;/VirtualHost&gt;</pre>


    <div class="warning"><h3>Limitation avec les filtres d&eacute;finis par l'utilisateur</h3>
    <p>La directive <code class="directive">AddOutputFilterByType</code> fonctionne avec
    des filtres int&eacute;gr&eacute;s standards comme <code>DEFLATE</code> et
    <code>INCLUDES</code>, mais ne fonctionne pas avec des filtres qui
    d&eacute;terminent leur configuration par nom de filtre, comme ceux d&eacute;finis
    par le module <code class="module"><a href="../mod/mod_ext_filter.html">mod_ext_filter</a></code> ou par la directive
    <code>LuaOutputFilter</code> du module <code class="module"><a href="../mod/mod_lua.html">mod_lua</a></code>. Cela est d&ucirc;
    au fait que le nom du filtre est modifi&eacute; en interne par l'adjonction du
    pr&eacute;fixe <code>BYTYPE:</code>. Pour les filtres d&eacute;finis par l'utilisateur,
    utilisez &agrave; la place les directives <code class="directive">FilterDeclare</code> et
    <code class="directive">FilterProvider</code> avec une expression correspondant &agrave;
    <code>%{CONTENT_TYPE}</code>.</p></div>


<h3>Voir aussi</h3>
<ul>
<li><code class="directive"><a href="../mod/mod_mime.html#addoutputfilter">AddOutputFilter</a></code></li>
<li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li>
<li><a href="../filter.html">Les filtres</a></li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="filterchain">Directive <span id="FilterChain">FilterChain</span> <a title="Lien permanent" href="#filterchain" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure la cha&icirc;ne de filtrage</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FilterChain [+=-@!]<var>nom_filtre</var> <var>...</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Surcharges autoris&eacute;es:</a></th><td>Options</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_filter</td></tr>
</table>
    <p>Cette directive permet de configurer une cha&icirc;ne de filtrage
    compos&eacute;e de filtres d&eacute;clar&eacute;s. <code class="directive">FilterChain</code>
    accepte un nombre illimit&eacute; d'arguments, chacun d'entre eux &eacute;tant
    pr&eacute;c&eacute;d&eacute; d'un caract&egrave;re de contr&ocirc;le unique qui d&eacute;termine l'action &agrave;
    entreprendre :</p>

    <dl>
    <dt><code>+<var>nom filtre</var></code></dt>
    <dd>Ajoute<var>nom filtre</var> &agrave; la fin de la cha&icirc;ne de filtrage</dd>

    <dt><code>@<var>nom filtre</var></code></dt>
    <dd>Ajoute <var>nom filtre</var> au d&eacute;but de la cha&icirc;ne de filtrage</dd>

    <dt><code>-<var>nom filtre</var></code></dt>
    <dd>Supprime <var>nom filtre</var> de la cha&icirc;ne de filtrage</dd>

    <dt><code>=<var>nom filtre</var></code></dt>
    <dd>Supprime tous les filtres de la cha&icirc;ne de filtrage existante et
    les remplace par <var>nom filtre</var></dd>

    <dt><code>!</code></dt>
    <dd>Supprime tous les filtres de la cha&icirc;ne de filtrage existante</dd>

    <dt><code><var>nom filtre</var></code></dt>
    <dd>&Eacute;quivalent &agrave; <code>+<var>nom filtre</var></code></dd>
    </dl>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="filterdeclare">Directive <span id="FilterDeclare">FilterDeclare</span> <a title="Lien permanent" href="#filterdeclare" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D&eacute;clare un filtre intelligent</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FilterDeclare <var>nom_filtre</var> <var>[type]</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Surcharges autoris&eacute;es:</a></th><td>Options</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_filter</td></tr>
</table>
    <p>Cette directive permet de d&eacute;clarer un filtre en sortie associ&eacute; &agrave;
    un en-t&ecirc;te ou une variable d'environnement qui d&eacute;terminera les
    conditions de son ex&eacute;cution. Le premier argument est le <var>nom du
    filtre</var> destin&eacute; &agrave; &ecirc;tre utilis&eacute; dans les directives <code class="directive"><a href="#filterprovider">FilterProvider</a></code>, <code class="directive"><a href="#filterchain">FilterChain</a></code> et <code class="directive"><a href="#filterprotocol">FilterProtocol</a></code>.</p>

    <p>Le dernier argument (optionnel) est le type du filtre, et peut
    prendre les valeurs de <code>ap_filter_type</code>, &agrave; savoir
    <code>RESOURCE</code> (valeur par d&eacute;faut), <code>CONTENT_SET</code>,
    <code>PROTOCOL</code>, <code>TRANSCODE</code>,
    <code>CONNECTION</code> ou <code>NETWORK</code>.</p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="filterprotocol">Directive <span id="FilterProtocol">FilterProtocol</span> <a title="Lien permanent" href="#filterprotocol" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>V&eacute;rifie le respect du protocole HTTP</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FilterProtocol <var>nom_filtre</var> [<var>nom_fournisseur</var>]
    <var>drapeaux_protocole</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Surcharges autoris&eacute;es:</a></th><td>Options</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_filter</td></tr>
</table>
    <p>Cette directive permet &agrave; <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> de s'assurer
    qu'un filtre ne s'ex&eacute;cutera pas s'il ne doit pas le faire, et que
    les en-t&ecirc;tes de la r&eacute;ponse HTTP sont d&eacute;finis correctement en tenant
    compte des effets du filtre.</p>

    <p>Cette directive se pr&eacute;sente sous deux formes. Avec trois
    arguments, elle s'applique de mani&egrave;re sp&eacute;cifique &agrave; un <var>nom
    filtre</var> et un <var>nom fournisseur</var> pour ce filtre. Avec
    deux arguments, elle s'applique &agrave; un <var>nom filtre</var> pour
    <em>tout</em> fournisseur qu'il actionne.</p>

    <p>Les drapeaux sp&eacute;cifi&eacute;s sont fusionn&eacute;s avec les drapeaux que les
    fournisseurs sous-jacents ont &eacute;ventuellement enregistr&eacute;s avec
    <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>. Par exemple, un filtre peut avoir
    sp&eacute;cifi&eacute; en interne un drapeau &eacute;quivalent &agrave; <code>change=yes</code>,
    mais une configuration particuli&egrave;re du module peut le surcharger
    en sp&eacute;cifiant <code>change=no</code>.
    </p>

    <p><var>drapeaux_protocole</var> peut contenir un ou plusieurs
    drapeaux parmi les suivants :</p>

    <dl>
    <dt><code>change=yes|no</code></dt>
    <dd>Indique si le filtre doit modifier le contenu, y compris &eacute;ventuellement sa
    taille</dd>

    <dt><code>change=1:1</code></dt>
    <dd>Le filtre modifie le contenu, mais pas sa taille</dd>

    <dt><code>byteranges=no</code></dt>
    <dd>Le filtre ne peut pas traiter de r&eacute;ponses &agrave; des sous-requ&ecirc;tes et
    n&eacute;cessite des r&eacute;ponses compl&egrave;tes en entr&eacute;e</dd>

    <dt><code>proxy=no</code></dt>
    <dd>Le filtre ne doit pas s'ex&eacute;cuter dans un contexte de mandataire</dd>

    <dt><code>proxy=transform</code></dt>
    <dd>Le filtre transforme la r&eacute;ponse de mani&egrave;re incompatible avec
    l'en-t&ecirc;te HTTP <code>Cache-Control: no-transform</code></dd>

    <dt><code>cache=no</code></dt>
    <dd>Le filtre fait en sorte que la sortie ne puisse pas &ecirc;tre mise en
    cache (par exemple en introduisant des modifications de contenu
    al&eacute;atoires)</dd>
    </dl>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="filterprovider">Directive <span id="FilterProvider">FilterProvider</span> <a title="Lien permanent" href="#filterprovider" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enregistre un filtre de contenu</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FilterProvider <var>nom_filtre</var> <var>nom_fournisseur</var>
 <var>expression</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Surcharges autoris&eacute;es:</a></th><td>Options</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_filter</td></tr>
</table>
    <p>Cette directive permet d'associer un <em>fournisseur</em> au
    filtre intelligent. Le fournisseur sera invoqu&eacute; si et seulement si
    l'<var>expression</var> est &eacute;valu&eacute;e vraie lorsque le s&eacute;lecteur de
    filtre est appel&eacute; pour la premi&egrave;re fois.</p>

    <p>
    <var>nom fournisseur</var> doit avoir &eacute;t&eacute; enregistr&eacute; au cours du
    chargement d'un module &agrave; l'aide de
    <code>ap_register_output_filter</code>.
    </p>

    <p><var>expression</var> est une expression <a href="../expr.html">ap_expr</a>.</p>


<h3>Voir aussi</h3>
<ul>
<li><a href="../expr.html">Les expressions dans le serveur HTTP
Apache</a>, pour une r&eacute;f&eacute;rence compl&egrave;te et d'autres exemples.</li>
<li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="filtertrace">Directive <span id="FilterTrace">FilterTrace</span> <a title="Lien permanent" href="#filtertrace" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Obtention d'informations de d&eacute;bogage/diagnostique en
provenance de <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>FilterTrace <var>nom_filtre</var> <var>niveau</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_filter</td></tr>
</table>
    <p>Cette directive permet d'obtenir des informations de d&eacute;bogage en
    provenance de <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>. Elle est con&ccedil;ue pour
    aider &agrave; tester et d&eacute;boguer les fournisseurs (ou modules de filtrage)
    ; elle peut aussi apporter une aide &agrave; l'utilisation de
    <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> lui-m&ecirc;me.</p>

    <p>La sortie de d&eacute;bogage d&eacute;pend de la d&eacute;finition d'argument
    <var>level</var> :</p>
    <dl>
    <dt><code>0</code> (valeur par d&eacute;faut)</dt>
    <dd>Aucune information de d&eacute;bogage n'est g&eacute;n&eacute;r&eacute;e.</dd>

    <dt><code>1</code></dt>
    <dd><code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code> va enregistrer les ensembles de
    conteneurs de donn&eacute;es (buckets and brigades) qui traversent le
    filtre dans le journal des erreurs, avant que le fournisseur ne les
    traite. Ces informations sont similaires &agrave; celles g&eacute;n&eacute;r&eacute;es par <a href="http://apache.webthing.com/mod_diagnostics/">mod_diagnostics</a>.
    </dd>

    <dt><code>2</code> (pas encore impl&eacute;ment&eacute;)</dt>
    <dd>Ce niveau permettra d'enregistrer l'ensemble des donn&eacute;es qui
    traversent le filtre dans un fichier temporaire avant de les envoyer
    au fournisseur. <strong>Pour un d&eacute;bogage mono-utilisateur
    seulement</strong> ; l'enregistrement des donn&eacute;es concernant
    plusieurs requ&ecirc;tes simultann&eacute;es ne sera pas support&eacute;.</dd>
    </dl>

</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_filter.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_filter.html" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2026 The Apache Software Foundation.<br>Autoris&eacute; sous <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p></div><script><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
var langToggle = document.querySelector('.lang-toggle');
var topLang = document.querySelector('.toplang');
if (langToggle && topLang) {
    langToggle.addEventListener('click', function() { topLang.classList.toggle('open'); });
}
var qv = document.getElementById('quickview');
if (qv) {
    document.body.appendChild(qv);
    var qvBtn = document.createElement('button');
    qvBtn.className = 'qv-toggle';
    qvBtn.setAttribute('aria-label', 'Toggle page navigation');
    qvBtn.innerHTML = '&#9776;';
    document.body.appendChild(qvBtn);
    qvBtn.addEventListener('click', function() {
        var isOpen = qv.classList.toggle('open');
        if (isOpen) {
            qv.style.top = window.scrollY + 10 + 'px';
        }
    });
    window.addEventListener('scroll', function() { qv.classList.remove('open'); });
}
//--><!]]></script>
</body></html>