<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX This file is generated from xml source: DO NOT EDIT XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --> <title>mod_headers - 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" type="text/javascript"> </script> <link href="../images/favicon.ico" rel="shortcut icon" /></head> <body> <div id="page-header"> <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</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="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Modules</a></div> <div id="page-content"> <div id="preamble"><h1>Module Apache mod_headers</h1> <div class="toplang"> <p><span>Langues Disponibles: </span><a href="../en/mod/mod_headers.html" hreflang="en" rel="alternate" title="English"> en </a> | <a href="../fr/mod/mod_headers.html" title="Français"> fr </a> | <a href="../ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | <a href="../ko/mod/mod_headers.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> </div> <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Personnalisation des en-têtes de requêtes et de réponses HTTP</td></tr> <tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr> <tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>headers_module</td></tr> <tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_headers.c</td></tr></table> <h3>Sommaire</h3> <p>Ce module fournit des directives permettant de contrôler et modifier les en-têtes de requêtes et de réponses HTTP. Les en-têtes peuvent être fusionnés, remplacés ou supprimés.</p> </div> <div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><h3>Sujets</h3> <ul id="topics"> <li><img alt="" src="../images/down.gif" /> <a href="#order">Chronologie du traitement</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#early">Traitement précoce et traitement tardif</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#examples">Exemples</a></li> </ul><h3 class="directives">Directives</h3> <ul id="toc"> <li><img alt="" src="../images/down.gif" /> <a href="#header">Header</a></li> <li><img alt="" src="../images/down.gif" /> <a href="#requestheader">RequestHeader</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__&list_id=144532&product=Apache%20httpd-2&query_format=specific&order=changeddate%20DESC%2Cpriority%2Cbug_severity&component=mod_headers">Problèmes connus</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&component=mod_headers">Signaler un bug</a></li></ul><h3>Voir aussi</h3> <ul class="seealso"> <li><a href="#comments_section">Commentaires</a></li></ul></div> <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="order" id="order">Chronologie du traitement</a></h2> <p>Les directives fournies par <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> peuvent s'insérer presque partout dans la configuration du serveur, et on peut limiter leur portée en les plaçant dans des <a href="../sections.html">sections de configuration</a>.</p> <p>La chronologie du traitement est importante et est affectée par l'ordre d'apparition des directives dans le fichier de configuration et par leur placement dans les <a href="../sections.html#mergin">sections de configuration</a>. Ainsi, ces deux directives ont un effet différent si leur ordre est inversé :</p> <pre class="prettyprint lang-config">RequestHeader append MirrorID "mirror 12" RequestHeader unset MirrorID</pre> <p>Dans cet ordre, l'en-tête <code>MirrorID</code> n'est pas défini. Si l'ordre des directives était inversé, l'en-tête <code>MirrorID</code> serait défini à "mirror 12".</p> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="early" id="early">Traitement précoce et traitement tardif</a></h2> <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> peut agir soir précocement, soit tardivement au niveau de la requête. Le mode normal est le mode tardif, lorsque les en-têtes de <em>requête</em> sont définis, immédiatement avant l'exécution du générateur de contenu, et pour les en-têtes de <em>réponse</em>, juste au moment où la réponse est envoyée sur le réseau. Utilisez toujours le mode tardif sur un serveur en production.</p> <p>Le mode précoce a été conçu à des fins d'aide aux tests et au débogage pour les développeurs. Les directives définies en utilisant le mot-clé <code>early</code> sont censées agir au tout début du traitement de la requête. Cela signifie que l'on peut les utiliser pour simuler différentes requêtes et définir des situations de test, tout en gardant à l'esprit que les en-têtes peuvent être modifiés à tout moment par d'autres modules avant que le réponse ne soit générée.</p> <p>Comme les directives précoces sont traitées avant que le chemin de la requête ne soit parcouru, les en-têtes précoces ne peuvent être définis que dans un contexte de serveur principal ou de serveur virtuel. Les directives précoces ne peuvent pas dépendre d'un chemin de requête, si bien qu'elles échoueront dans des contextes tels que <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou <code class="directive"><a href="../mod/core.html#location"><Location></a></code>.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="section"> <h2><a name="examples" id="examples">Exemples</a></h2> <ol> <li> Copie tous les en-têtes de requête qui commencent par "TS" vers les en-têtes de la réponse : <pre class="prettyprint lang-config">Header echo ^TS</pre> </li> <li> Ajoute à la réponse un en-tête, <code>mon-en-tête</code>, qui contient un horodatage permettant de déterminer le moment où la requête a été reçue, et le temps qui s'est écoulé jusqu'à ce que la requête ait commencé à être servie. Cet en-tête peut être utilisé par le client pour estimer la charge du serveur ou isoler les goulets d'étranglement entre le client et le serveur. <pre class="prettyprint lang-config">Header set mon-en-tête "%D %t"</pre> <p>le résultat est l'ajout à la réponse d'un en-tête du type :</p> <div class="example"><p><code> mon-en-tête: D=3775428 t=991424704447256 </code></p></div> </li> <li> Dit Bonjour à Joe <div class="example"><p><code> Header set mon-en-tête "Bonjour Joe. Il a fallu %D microsecondes \<br /> à Apache pour servir cette requête." </code></p></div> <p>le résultat est l'ajout à la réponse d'un en-tête du type :</p> <pre class="prettyprint lang-config"> Header set MyHeader "Bonjour Joe. Il a fallu D=3775428 microsecondes à Apache pour servir cette requête."</pre> </li> <li> Ajoute l'en-tête <code>mon-en-tête</code> à la réponse si et seulement si l'en-tête <code>mon-en-tête-requête</code> est présent dans la requête. Ceci peut s'avérer utile pour générer des en-têtes de réponse "à la tête du client". Notez que cet exemple nécessite les services du module <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code>. <pre class="prettyprint lang-config">SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader</pre> <p>Si l'en-tête <code>mon-en-tête-requête: mavaleur</code> est présent dans la requête HTTP, la réponse contiendra un en-tête du type :</p> <div class="example"><p><code> mon-en-tête: D=3775428 t=991424704447256 montexte </code></p></div> </li> <li> Permet à DAV de fonctionner avec Apache sur SSL (voir la <a href="http://svn.haxx.se/users/archive-2006-03/0549.shtml">description du problème</a>) en remplaçant <var>https:</var> par <var>http:</var> dans l'en-tête <var>Destination</var> : <pre class="prettyprint lang-config">RequestHeader edit Destination ^https: http: early</pre> </li> <li> Définit la valeur d'un même en-tête sous de multiples conditions non exclusives, mais ne duplique pas une valeur déjà définie dans l'en-tête qui en résulte. Si toutes les conditions suivantes sont satisfaites pour une requête (en d'autres termes, si les trois variables d'environnement <code>CGI</code>, <code>NO_CACHE</code> et <code>NO_STORE</code> existent pour la requête) : <pre class="prettyprint lang-config">Header merge Cache-Control no-cache env=CGI Header merge Cache-Control no-cache env=NO_CACHE Header merge Cache-Control no-store env=NO_STORE</pre> <p>alors, la réponse contiendra l'en-tête suivant :</p> <div class="example"><p><code> Cache-Control: no-cache, no-store </code></p></div> <p>Si <code>append</code> avait été utilisé à la place de <code>merge</code>, la réponse aurait contenu l'en-tête suivant :</p> <div class="example"><p><code> Cache-Control: no-cache, no-cache, no-store </code></p></div> </li> <li> Définit un cookie de test si et seulement si le client n'envoie pas de cookie <pre class="prettyprint lang-config">Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"</pre> </li> <li> Ajoute un en-tête de mise en cache pour les réponses avec un code d'état HTTP de 200 <pre class="prettyprint lang-config">Header append Cache-Control s-maxage=600 "expr=%{REQUEST_STATUS} == 200"</pre> </li> </ol> </div> <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="directive-section"><h2><a name="header" id="header">Directive</a> <a name="Header" id="Header">Header</a></h2> <table class="directive"> <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure les en-têtes d'une réponse HTTP</td></tr> <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>Header [<var>condition</var>] add|append|echo|edit|edit*|merge|set|setifempty|unset|note <var>en-tête</var> [[expr=]<var>valeur</var> [<var>remplacement</var>] [early|env=[!]<var>variable</var>|expr=<var>expression</var>]] </code></td></tr> <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr> <tr><th><a href="directive-dict.html#Override">Surcharges autorisées:</a></th><td>FileInfo</td></tr> <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr> <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>SetIfEmpty est disponible depuis la version 2.4.7 du serveur HTTP Apache ; le paramètre expr=valeur a été introduit avec la version 2.4.10</td></tr> </table> <p>Cette directive permet de remplacer, fusionner, ou supprimer des en-têtes de réponse HTTP. L'en-tête est modifié juste après que le gestionnaire de contenu et les filtres en sortie ne s'exécutent, ce qui permet la modification des en-têtes sortants.</p> <p>L'argument optionnel <var>condition</var> permet de déterminer sur quelle table interne d'en-têtes de réponses cette directive va opérer : <code>onsuccess</code> (valeur par défaut, peut être omis) ou <code>always</code>. A la différence de ceux de la première table, les en-têtes de la seconde sont ajoutés à la réponse même en cas d'erreur et sont conservés au fil des redirections internes (par exemple les gestionnaires ErrorDocument). Notez aussi que la répétition de cette directive avec les deux conditions peut être pertinente dans certains scénarios, car <code>always</code> n'englobe pas <code>onsuccess</code> en ce qui concerne les en-têtes existants :</p> <ul> <li>Vous ajoutez un en-tête à une réponse générée localement et échouée (non-2xx), une redirection par exemple, et dans ce cas, seule la table correspondant à <code>always</code> est utilisée dans la réponse définitive.</li> <li>Vous modifiez ou supprimez un en-tête généré par un script CGI ou par <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code>, auquel cas, les en-têtes des scripts CGI sont dans la table correspondant à <code>always</code> et non dans la table par défaut.</li> <li>Vous modifiez ou supprimez un en-tête généré par tel ou tel composant du serveur, mais cet en-tête n'est pas trouvé par la condition par défaut <code>onsuccess</code>.</li> </ul> <p>Comme il n'y a pas de liste unique "normalisée" d'en-têtes, la manière dont httpd stocke en interne les en-têtes des réponses HTTP est à l'origine de la fonctionnalité que constitue la différence entre <code>onsuccess</code> et <code>always</code>. Si vous ne gardez pas à l'esprit le concept ci-après lors de l'écriture de votre configuration, certaines réponses HTTP pourront contenir des en-têtes dupliqués (ce qui pourra dérouter les utilisateurs ou même parfois les clients HTTP). Supposons par exemple que votre configuration comporte un mandataire PHP simple avec <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code> et que votre script PHP d'arrière-plan ajoute l'en-tête <code>X-Foo: bar</code> à chaque réponse HTTP. Comme décrit plus haut, <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code> utilise la table <code>always</code> pour stocker les en-têtes, et une configuration comme la suivante n'aboutira pas au résultat attendu car l'en-tête sera dupliqué avec les deux valeurs :</p> <pre class="prettyprint lang-config"># la valeur de X-Foo est définie dans la table d'en-têtes 'onsuccess' Header set X-Foo: baz</pre> <p>Plusieurs modèles de configuration permettent de contourner ce problème, comme celui-ci :</p> <pre class="prettyprint lang-config"># 'onsuccess' peut être omis car il s'agit de la valeur par défaut Header onsuccess unset X-Foo Header always set X-Foo "baz"</pre> <p>Outre le paramètre <var>condition</var> décrit ci-dessus, vous pouvez limiter une action en fonction de codes d'état HTTP, par exemple pour les requêtes mandatées ou générées par un programme CGI. Voir l'exemple qui utilise %{REQUEST_STATUS} dans la section ci-dessus.</p> <p>L'action que cette directive provoque est déterminée par le premier argument (ou par le second argument si une <var>condition</var> est spécifiée). Il peut prendre une des valeurs suivantes :</p> <div class="warning"><h3>Avertissement</h3> <p>Vous devez lire la différence, décrite plus haut, entre les listes d'en-têtes <code>always</code> et <code>onsuccess</code> avant de lire la liste d'actions ci-dessous car cet important concept s'applique encore ici. En fait, chaque action fonctionne telle qu'elle est décrite mais seulement pour la liste d'en-têtes cible.</p> </div> <dl> <dt><code>add</code></dt> <dd>L'en-tête est ajouté au jeu d'en-têtes préexistant, même s'il existe déjà. Ceci peut conduire à la présence de deux (ou plusieurs) en-têtes possèdant le même nom et donc induire des conséquences imprévues ; en général, il est préférable d'utiliser <code>set</code>, <code>append</code> ou <code>merge</code>.</dd> <dt><code>append</code></dt> <dd>La valeur d'en-tête est ajoutée à tout en-tête existant de même nom. Lorsqu'une nouvelle valeur est ainsi ajoutée, elle est séparée de celles qui sont déjà présentes par une virgule. Il s'agit de la méthode HTTP standard permettant d'affecter plusieurs valeurs à un en-tête.</dd> <dt><code>echo</code></dt> <dd>Les en-têtes de la requête possédant le nom spécifié sont recopiés vers les en-têtes de la réponse. <var>en-tête</var> peut être une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a>, et <var>valeur</var> ne doit pas être présent.</dd> <dt><code>edit</code></dt> <dt><code>edit*</code></dt> <dd>Si l'en-tête existe, sa valeur est modifiée en fonction d'une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a> de type recherche/remplacement. L'argument <var>valeur</var> est une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a>, et l'argument <var>remplacement</var> une chaîne de caractères de remplacement qui peut contenir des références arrières ou des spécificateurs de format. La forme <code>edit</code> n'effectuera une recherche/remplacement qu'une seule fois dans la valeur de l'en-tête, alors que la forme <code>edit*</code> en effectuera autant que le nombre d'apparition de la chaîne à remplacer.</dd> <dt><code>merge</code></dt> <dd>La valeur d'en-tête est ajoutée à tout en-tête de même nom, sauf si elle apparaît déjà dans la liste des valeurs préexistantes de l'en-tête séparées par des virgules. Lorsqu'une nouvelle valeur est ainsi ajoutée, elle est séparée de celles qui sont déjà présentes par une virgule. Il s'agit de la méthode HTTP standard permettant d'affecter plusieurs valeurs à un en-tête. Les valeurs sont comparées en tenant compte de la casse, et après le traitement de tous les spécificateurs de format. Une valeur entourée de guillemets est considérée comme différente de la même valeur mais sans guillemets.</dd> <dt><code>set</code></dt> <dd>L'en-tête est défini, remplaçant tout en-tête préexistant avec le même nom. L'argument <var>valeur</var> peut être une chaîne de formatage.</dd> <dt><code>setifempty</code></dt> <dd>L'en-tête est défini, mais seulement s'il n'existe aucun en-tête avec le même nom. <div class="note"> L'en-tête Content-Type est un cas particulier car il est possible que sa valeur ait été déterminée mais que l'en-tête ne soit pas présent dans la réponse lorsque <code>setifempty</code> est évalué. Dans ce cas, il est préférable d'utiliser <code>set</code> comme dans l'exemple suivant : <pre class="prettyprint lang-config">Header set Content-Type "text/plain" "expr=-z %{CONTENT_TYPE}"</pre> </div></dd> <dt><code>unset</code></dt> <dd>L'en-tête est supprimé s'il existe. Si plusieurs en-têtes possèdent le même nom, ils seront tous supprimés. L'argument <var>value</var> ne doit pas apparaître.</dd> <dt><code>note</code></dt> <dd>La valeur de l'<var>en-tête</var> considéré est copiée dans une note interne dont le nom est spécifié via l'argument <var>valeur</var>. Ceci permet de journaliser la valeur d'un en-tête envoyé par un programme CGI ou une ressource mandatée, même s'il est prévu de l'effacer.<br /> Disponible à partir de la version 2.4.7 du serveur HTTP Apache.</dd> </dl> <p>Cet argument est suivi d'un nom d'<var>en-tête</var> qui peut se terminer par un caractère ':', mais ce n'est pas obligatoire. La casse est ignorée avec <code>set</code>, <code>append</code>, <code>merge</code>, <code>add</code>, <code>unset</code> et <code>edit</code>. Le nom d'<var>en-tête</var> est sensible à la casse pour <code>echo</code> et peut être une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a>.</p> <p>Avec <code>set</code>, <code>append</code>, <code>merge</code> et <code>add</code>, une <var>valeur</var> est spécifiée comme argument suivant. Si <var>valeur</var> contient des espaces, elle doit être entourée de guillemets. <var>valeur</var> peut être une chaîne de caractères, une chaîne contenant des spécificateurs de format propres à <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> (et des caractères littéraux), ou une expression <a href="../expr.html">ap_expr</a> préfixée par <em>expr=</em>.</p> <p><var>valeur</var> supporte les spécificateurs de format suivants :</p> <table class="bordered"><tr class="header"><th>Format</th><th>Description</th></tr> <tr><td><code>%%</code></td> <td>Le caractère pourcentage</td></tr> <tr class="odd"><td><code>%t</code></td> <td>Le moment de réception de la requête en temps universel coordonné depuis le temps epoch (Jan. 1, 1970) et exprimé en microsecondes. La valeur est précédée de <code>t=</code>.</td></tr> <tr><td><code>%D</code></td> <td>Le temps écoulé entre la réception de la requête et l'envoi des en-têtes sur le réseau. Il s'agit de la durée de traitement de la requête. La valeur est précédée de <code>D=</code>. La valeur est exprimée en microsecondes.</td></tr> <tr class="odd"><td><code>%l</code></td> <td>La charge moyenne courante du serveur proprement dit. Ce sont les valeurs obtenues par <code>getloadavg()</code> qui représentent la charge moyenne courante, sur 5 minutes et sur 15 minutes. Chaque valeur est précédée de <code>l=</code> et séparée de la suivante par un <code>/</code>.<br /> Disponible depuis la version 2.4.4 du serveur HTTP Apache. </td></tr> <tr><td><code>%i</code></td> <td>Le pourcentage courant de httpd au repos (de 0 à 100) en se basant sur le nombre de processus et threads disponibles. La valeur est précédée de <code>i=</code>.<br /> Disponible depuis la version 2.4.4 du serveur HTTP Apache. </td></tr> <tr class="odd"><td><code>%b</code></td> <td>Le pourcentage courant de httpd utilisé (de 0 à 100) en se basant sur le nombre de processus et threads disponibles. La valeur est précédée de <code>b=</code>.<br /> Disponible depuis la version 2.4.4 du serveur HTTP Apache. </td></tr> <tr><td><code>%{NOM_VARIABLE}e</code></td> <td>Le contenu de la <a href="../env.html">variable d'environnement</a> <code>NOM_VARIABLE</code>.</td></tr> <tr class="odd"><td><code>%{NOM_VARIABLE}s</code></td> <td>Le contenu de la <a href="../env.html">variable d'environnement SSL</a> <code>NOM_VARIABLE</code>, si <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> est activé.</td></tr> </table> <div class="note"><h3>Note</h3> <p>Le spécificateur de format <code>%s</code> est disponible depuis la version 2.1 d'Apache ; il peut être utilisé à la place de <code>%e</code> pour éviter de devoir spécifier <code>SSLOptions +StdEnvVars</code>. Cependant, si <code>SSLOptions +StdEnvVars</code> doit tout de même être spécifié pour une raison quelconque, <code>%e</code> sera plus efficace que <code>%s</code>.</p> </div> <div class="note"><h3>Note à propos des valeurs des expressions</h3> <p>Lorsque le paramètre valeur utilise l'interpréteur <a href="../expr.html">ap_expr</a>, certaines syntaxes d'expressions seront différentes des exemples qui évaluent des expressions <em>booléennes</em> telles que <If> :</p> <ul> <li>Le point de départ de la syntaxe est 'string' au lieu de 'expr'.</li> <li>Les appels de fonction utilisent la syntaxe %{funcname:arg} au lieu de funcname(arg).</li> <li>Les fonctions multi-arguments ne sont pas encore disponibles depuis le point de départ 'string'.</li> <li>Il faut mettre entre guillemets l'ensemble du paramètre, comme dans l'exemple suivant : <pre class="prettyprint lang-config">Header set foo-checksum "expr=%{md5:foo}"</pre> </li> </ul> </div> <p><code>edit</code>nécessite les deux arguments <var>valeur</var>, qui est une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a>, et une chaîne additionnelle <var>remplacement</var>. Depuis la version 2.4.7, la chaîne de remplacement peut aussi contenir des spécificateurs de format.</p> <p>La directive <code class="directive">Header</code> peut être suivie d'un argument additionnel qui peut prendre les valeurs suivantes :</p> <dl> <dt><code>early</code></dt> <dd>Spécifie <a href="#early">traitement préalable</a>.</dd> <dt><code>env=[!]<var>variable</var></code></dt> <dd>La directive est appliquée si et seulement si la <a href="../env.html">variable d'environnement</a> <code>variable</code> existe. Un <code>!</code> devant <code>variable</code> inverse le test, et la directive ne s'appliquera alors que si <code>variable</code> n'est pas définie.</dd> <dt><code>expr=<var>expression</var></code></dt> <dd>La directive s'applique si et seulement si <var>expression</var> est évaluée à true. Vous trouverez plus de détails à propos de la syntaxe et de l'évaluation des expressions dans la documentation <a href="../expr.html">ap_expr</a>. <pre class="prettyprint lang-config"> # Cet exemple retarde l'évaluation de la clause de condition par # rapport à <If> Header always set CustomHeader my-value "expr=%{REQUEST_URI} =~ m#^/special_path.php$#"</pre> </dd> </dl> <p>Excepté le cas du mode <a href="#early">précoce</a>, les directives <code class="directive">Header</code> sont traitées juste avant l'envoi de la réponse sur le réseau. Cela signifie qu'il est possible de définir et/ou modifier la plupart des en-têtes, à l'exception de certains en-têtes qui sont ajoutés par le filtre d'en-tête HTTP. Avant la version 2.2.12, il n'était pas possible de modifier l'en-tête Content-Type avec cette directive.</p> </div> <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> <div class="directive-section"><h2><a name="requestheader" id="requestheader">Directive</a> <a name="RequestHeader" id="RequestHeader">RequestHeader</a></h2> <table class="directive"> <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure les en-têtes d'une requête HTTP</td></tr> <tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>RequestHeader add|append|edit|edit*|merge|set|setifempty|unset <var>en-tête</var> [[expr=]<var>valeur</var> [<var>remplacement</var>] [early|env=[!]<var>variable</var>|expr=<var>expression</var>]] </code></td></tr> <tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr> <tr><th><a href="directive-dict.html#Override">Surcharges autorisées:</a></th><td>FileInfo</td></tr> <tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr> <tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>SetIfEmpty est disponible depuis la version 2.4.7 du serveur HTTP Apache ; le paramètre expr=valeur a été introduit avec la version 2.4.10</td></tr> </table> <p>Cette directive permet de remplacer, fusionner, modifier ou supprimer des en-têtes de requête HTTP. L'en-tête est modifié juste avant que le gestionnaire de contenu ne s'exécute, ce qui permet la modification des en-têtes entrants. L'action effectuée est déterminée par le premier argument. Ce dernier accepte les valeurs suivantes :</p> <dl> <dt><code>add</code></dt> <dd>L'en-tête est ajouté au jeu d'en-têtes préexistant, même s'il existe déjà. Ceci peut conduire à la présence de deux (ou plusieurs) en-têtes possèdant le même nom et donc induire des conséquences imprévues ; en général, il est préférable d'utiliser <code>set</code>, <code>append</code> ou <code>merge</code>.</dd> <dt><code>append</code></dt> <dd>La valeur d'en-tête est ajoutée à tout en-tête existant de même nom. Lorsqu'une nouvelle valeur est ainsi ajoutée, elle est séparée de celles qui sont déjà présentes par une virgule. Il s'agit de la méthode HTTP standard permettant d'affecter plusieurs valeurs à un en-tête.</dd> <dt><code>edit</code></dt> <dt><code>edit*</code></dt> <dd>Si l'en-tête existe, sa valeur est modifiée en fonction d'une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a> de type recherche/remplacement. L'argument <var>valeur</var> est une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a>, et l'argument <var>remplacement</var> une chaîne de caractères de remplacement qui peut contenir des références arrières ou des spécificateurs de format. Avec <code>edit</code>, la chaîne de l'en-tête correspondant au modèle ne sera recherchée et remplacée qu'une seule fois, alors qu'avec <code>edit*</code>, elle le sera pour chacune de ses instances si elle apparaît plusieurs fois.</dd> <dt><code>merge</code></dt> <dd>La valeur d'en-tête est ajoutée à tout en-tête de même nom, sauf si elle apparaît déjà dans la liste des valeurs préexistantes de l'en-tête séparées par des virgules. Lorsqu'une nouvelle valeur est ainsi ajoutée, elle est séparée de celles qui sont déjà présentes par une virgule. Il s'agit de la méthode HTTP standard permettant d'affecter plusieurs valeurs à un en-tête. Les valeurs sont comparées en tenant compte de la casse, et après le traitement de tous les spécificateurs de format. Une valeur entourée de guillemets est considérée comme différente de la même valeur mais sans guillemets.</dd> <dt><code>set</code></dt> <dd>L'en-tête est défini, remplaçant tout en-tête préexistant avec le même nom.</dd> <dt><code>setifempty</code></dt> <dd>L'en-tête est défini, mais seulement s'il n'existe aucun en-tête avec le même nom.<br /> Disponible depuis la version 2.4.7 du serveur HTTP Apache.</dd> <dt><code>unset</code></dt> <dd>L'en-tête est supprimé s'il existe. Si plusieurs en-têtes possèdent le même nom, ils seront tous supprimés. L'argument <var>value</var> ne doit pas apparaître.</dd> </dl> <p>Cet argument est suivi d'un nom d'en-tête qui peut se terminer par un caractère ':', mais ce n'est pas obligatoire. La casse est ignorée. Avec <code>set</code>, <code>append</code>, <code>merge</code> et <code>add</code>, une <var>valeur</var> est fournie en troisième argument. Si une <var>valeur</var> contient des espaces, elle doit être entourée de guillemets. Avec <code>unset</code>, aucune <var>valeur</var> ne doit apparaître. <var>valeur</var> peut être une chaîne de caractères, une chaîne contenant des spécificateurs de format, ou une combinaison des deux. Les spécificateurs de format supportés sont les mêmes que ceux de la directive <code class="directive"><a href="#header">Header</a></code>, à laquelle vous pouvez vous reporter pour plus de détails. Avec <code>edit</code>, les deux arguments <var>valeur</var> et <var>remplacement</var> sont obligatoires, et correspondent respectivement à une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a> et à une chaîne de remplacement.</p> <p>La directive <code class="directive">RequestHeader</code> peut être suivie d'un argument supplémentaire, qui pourra prendre les valeurs suivantes :</p> <dl> <dt><code>early</code></dt> <dd>Spécifie <a href="#early">traitement préalable</a>.</dd> <dt><code>env=[!]<var>variable</var></code></dt> <dd>La directive est appliquée si et seulement si la <a href="../env.html">variable d'environnement</a> <code>variable</code> existe. Un <code>!</code> devant <code>variable</code> inverse le test, et la directive ne s'appliquera alors que si <code>variable</code> n'est pas définie.</dd> <dt><code>expr=<var>expression</var></code></dt> <dd>La directive s'applique si et seulement si <var>expression</var> est évaluée à true. Vous trouverez plus de détails à propos de la syntaxe et de l'évaluation des expressions dans la documentation <a href="../expr.html">ap_expr</a>.</dd> </dl> <p>Excepté le cas du mode <a href="#early">précoce</a>, la directive <code class="directive">RequestHeader</code> est traitée juste avant la prise en compte de la requête par son gestionnaire, au cours de la phase de vérification. Ceci permet la modification des en-têtes générés par le navigateur, ou par les filtres en entrée d'Apache.</p> </div> </div> <div class="bottomlang"> <p><span>Langues Disponibles: </span><a href="../en/mod/mod_headers.html" hreflang="en" rel="alternate" title="English"> en </a> | <a href="../fr/mod/mod_headers.html" title="Français"> fr </a> | <a href="../ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | <a href="../ko/mod/mod_headers.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> <script type="text/javascript"><!--//--><![CDATA[//><!-- var comments_shortname = 'httpd'; var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_headers.html'; (function(w, d) { if (w.location.hostname.toLowerCase() == "httpd.apache.org") { d.write('<div id="comments_thread"><\/div>'); var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); } else { d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); } })(window, document); //--><!]]></script></div><div id="footer"> <p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://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/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- if (typeof(prettyPrint) !== 'undefined') { prettyPrint(); } //--><!]]></script> </body></html>