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: 1769899 -->
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_headers.xml.meta">
27 <name>mod_headers</name>
28 <description>Personnalisation des en-têtes de requêtes et de réponses
30 <status>Extension</status>
31 <sourcefile>mod_headers.c</sourcefile>
32 <identifier>headers_module</identifier>
35 <p>Ce module fournit des directives permettant de contrôler et
36 modifier les en-têtes de requêtes et de réponses HTTP. Les en-têtes
37 peuvent être fusionnés, remplacés ou supprimés.</p>
40 <section id="order"><title>Chronologie du traitement</title>
42 <p>Les directives fournies par <module>mod_headers</module> peuvent
43 s'insérer presque partout dans la configuration du serveur, et on
44 peut limiter leur portée en les plaçant dans des <a
45 href="../sections.html">sections de configuration</a>.</p>
47 <p>La chronologie du traitement est importante et est affectée par
48 l'ordre d'apparition des directives dans le fichier de configuration
49 et par leur placement dans les <a
50 href="../sections.html#mergin">sections de configuration</a>. Ainsi,
51 ces deux directives ont un effet différent si leur ordre est inversé
54 <highlight language="config">
55 RequestHeader append MirrorID "mirror 12"
56 RequestHeader unset MirrorID
59 <p>Dans cet ordre, l'en-tête <code>MirrorID</code> n'est pas défini.
60 Si l'ordre des directives était inversé, l'en-tête
61 <code>MirrorID</code> serait défini à "mirror 12".</p>
64 <section id="early"><title>Traitement précoce et traitement
66 <p><module>mod_headers</module> peut agir soir précocement, soit
67 tardivement au niveau de la requête. Le mode normal est le mode
68 tardif, lorsque les en-têtes de <em>requête</em> sont définis, immédiatement
69 avant l'exécution du générateur de contenu, et pour les en-têtes de
70 <em>réponse</em>, juste au moment où la réponse est envoyée sur le réseau.
71 Utilisez toujours le mode tardif sur un serveur en production.</p>
73 <p>Le mode précoce a été conçu à des fins d'aide aux tests et au
74 débogage pour les développeurs. Les directives définies en utilisant
75 le mot-clé <code>early</code> sont censées agir au tout début du
76 traitement de la requête. Cela signifie que l'on peut les utiliser
77 pour simuler différentes requêtes et définir des situations de test,
78 tout en gardant à l'esprit que les en-têtes peuvent être modifiés à
79 tout moment par d'autres modules avant que le réponse ne soit
82 <p>Comme les directives précoces sont traitées avant que le
83 chemin de la requête ne soit parcouru, les en-têtes
84 précoces ne peuvent être définis que dans un contexte de serveur
85 principal ou de serveur virtuel. Les directives précoces ne peuvent
86 pas dépendre d'un chemin de requête, si bien qu'elles échoueront
87 dans des contextes tels que <directive type="section"
88 module="core">Directory</directive> ou <directive type="section"
89 module="core">Location</directive>.</p>
92 <section id="examples"><title>Exemples</title>
96 Copie tous les en-têtes de requête qui commencent par "TS" vers
97 les en-têtes de la réponse :
99 <highlight language="config">
105 Ajoute à la réponse un en-tête, <code>mon-en-tête</code>, qui
106 contient un horodatage permettant de déterminer le moment où la
107 requête a été reçue, et le temps qui s'est écoulé jusqu'à ce que
108 la requête ait commencé à être servie. Cet en-tête peut être
109 utilisé par le client pour estimer la charge du serveur ou
110 isoler les goulets d'étranglement entre le client et le
113 <highlight language="config">
114 Header set mon-en-tête "%D %t"
117 <p>le résultat est l'ajout à la réponse d'un en-tête du type :</p>
120 mon-en-tête: D=3775428 t=991424704447256
128 Header set mon-en-tête "Bonjour Joe. Il a fallu %D microsecondes \<br />
129 à Apache pour servir cette requête."
132 <p>le résultat est l'ajout à la réponse d'un en-tête du type :</p>
134 <highlight language="config">
135 Header set MyHeader "Bonjour Joe. Il a fallu D=3775428 microsecondes à Apache
136 pour servir cette requête."
141 Ajoute l'en-tête <code>mon-en-tête</code> à la réponse si et
142 seulement si l'en-tête <code>mon-en-tête-requête</code> est
143 présent dans la requête. Ceci peut s'avérer utile pour générer
144 des en-têtes de réponse "à la tête du client". Notez que cet
145 exemple nécessite les services du module
146 <module>mod_setenvif</module>.
148 <highlight language="config">
149 SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader
150 Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
153 <p>Si l'en-tête <code>mon-en-tête-requête: mavaleur</code> est
154 présent dans la requête HTTP, la réponse contiendra un en-tête
158 mon-en-tête: D=3775428 t=991424704447256 montexte
163 Permet à DAV de fonctionner avec Apache sur SSL (voir la <a
164 href="http://svn.haxx.se/users/archive-2006-03/0549.shtml">description
165 du problème</a>) en remplaçant <var>https:</var> par
166 <var>http:</var> dans l'en-tête <var>Destination</var> :
168 <highlight language="config">
169 RequestHeader edit Destination ^https: http: early
174 Définit la valeur d'un même en-tête sous de multiples conditions
175 non exclusives, mais ne duplique pas une valeur déjà définie
176 dans l'en-tête qui en résulte. Si toutes les conditions
177 suivantes sont satisfaites pour une requête (en d'autres termes,
178 si les trois variables d'environnement <code>CGI</code>,
179 <code>NO_CACHE</code> et <code>NO_STORE</code> existent pour la
182 <highlight language="config">
183 Header merge Cache-Control no-cache env=CGI
184 Header merge Cache-Control no-cache env=NO_CACHE
185 Header merge Cache-Control no-store env=NO_STORE
188 <p>alors, la réponse contiendra l'en-tête suivant :</p>
191 Cache-Control: no-cache, no-store
194 <p>Si <code>append</code> avait été utilisé à la place de
195 <code>merge</code>, la réponse aurait contenu l'en-tête suivant
199 Cache-Control: no-cache, no-cache, no-store
203 Définit un cookie de test si et seulement si le client n'envoie
205 <highlight language="config">
206 Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"
210 Ajoute un en-tête de mise en cache pour les réponses avec un
211 code d'état HTTP de 200
212 <highlight language="config">
213 Header append Cache-Control s-maxage=600 "expr=%{REQUEST_STATUS} == 200"
221 <name>RequestHeader</name>
222 <description>Configure les en-têtes d'une requête HTTP</description>
223 <syntax>RequestHeader add|append|edit|edit*|merge|set|setifempty|unset
224 <var>en-tête</var> [[expr=]<var>valeur</var>
225 [<var>remplacement</var>]
226 [early|env=[!]<var>variable</var>|expr=<var>expression</var>]]
228 <contextlist><context>server config</context><context>virtual host</context>
229 <context>directory</context><context>.htaccess</context></contextlist>
230 <override>FileInfo</override>
231 <compatibility>SetIfEmpty est disponible depuis la version 2.4.7 du
232 serveur HTTP Apache ; le paramètre expr=valeur a été introduit avec la
233 version 2.4.10</compatibility>
236 <p>Cette directive permet de remplacer, fusionner, modifier ou
237 supprimer des en-têtes de requête HTTP. L'en-tête est modifié juste
238 avant que le gestionnaire de contenu ne s'exécute, ce qui permet la
239 modification des en-têtes entrants. L'action effectuée est
240 déterminée par le premier argument. Ce dernier accepte les valeurs
245 <dt><code>add</code></dt>
246 <dd>L'en-tête est ajouté au jeu d'en-têtes préexistant, même s'il
247 existe déjà. Ceci peut conduire à la présence de deux (ou plusieurs)
248 en-têtes possèdant le même nom et donc induire des conséquences
249 imprévues ; en général, il est préférable d'utiliser
250 <code>set</code>, <code>append</code> ou <code>merge</code>.</dd>
252 <dt><code>append</code></dt>
253 <dd>La valeur d'en-tête est ajoutée à tout en-tête existant de même
254 nom. Lorsqu'une nouvelle valeur est ainsi ajoutée, elle est séparée
255 de celles qui sont déjà présentes par une virgule. Il s'agit de la
256 méthode HTTP standard permettant d'affecter plusieurs valeurs à un
259 <dt><code>edit</code></dt>
260 <dt><code>edit*</code></dt>
261 <dd>Si l'en-tête existe, sa valeur est modifiée en fonction d'une
262 <glossary ref="regex">expression rationnelle</glossary> de type
263 recherche/remplacement. L'argument <var>valeur</var> est une
264 <glossary ref="regex">expression rationnelle</glossary>, et
265 l'argument <var>remplacement</var> une chaîne de caractères de
266 remplacement qui peut contenir des références
267 arrières ou des spécificateurs de format. Avec
268 <code>edit</code>, la chaîne de l'en-tête correspondant au modèle ne
269 sera recherchée et remplacée qu'une seule fois, alors qu'avec
270 <code>edit*</code>, elle le sera pour chacune de ses instances si
271 elle apparaît plusieurs fois.</dd>
273 <dt><code>merge</code></dt>
274 <dd>La valeur d'en-tête est ajoutée à tout en-tête de même nom, sauf
275 si elle apparaît déjà dans la liste des valeurs préexistantes de
276 l'en-tête séparées par des virgules. Lorsqu'une nouvelle valeur est
277 ainsi ajoutée, elle est séparée de celles qui sont déjà présentes
278 par une virgule. Il s'agit de la méthode HTTP standard permettant
279 d'affecter plusieurs valeurs à un en-tête. Les valeurs sont
280 comparées en tenant compte de la casse, et après le traitement de
281 tous les spécificateurs de format. Une valeur entourée de guillemets
282 est considérée comme différente de la même valeur mais sans
285 <dt><code>set</code></dt>
286 <dd>L'en-tête est défini, remplaçant tout en-tête préexistant avec
289 <dt><code>setifempty</code></dt>
290 <dd>L'en-tête est défini, mais seulement s'il n'existe
291 aucun en-tête avec le même nom.<br />
292 Disponible depuis la version 2.4.7 du serveur HTTP Apache.</dd>
294 <dt><code>unset</code></dt>
295 <dd>L'en-tête est supprimé s'il existe. Si plusieurs en-têtes
296 possèdent le même nom, ils seront tous supprimés. L'argument
297 <var>value</var> ne doit pas apparaître.</dd>
300 <p>Cet argument est suivi d'un nom d'en-tête qui peut se terminer
301 par un caractère ':', mais ce n'est pas obligatoire. La casse est
302 ignorée. Avec <code>set</code>, <code>append</code>,
303 <code>merge</code> et <code>add</code>, une <var>valeur</var> est
304 fournie en troisième argument. Si une <var>valeur</var> contient des
305 espaces, elle doit être entourée de guillemets. Avec
306 <code>unset</code>, aucune <var>valeur</var> ne doit apparaître.
307 <var>valeur</var> peut être une chaîne de caractères, une chaîne
308 contenant des spécificateurs de format, ou une combinaison des deux.
309 Les spécificateurs de format supportés sont les mêmes que ceux de la
310 directive <directive module="mod_headers">Header</directive>, à
311 laquelle vous pouvez vous reporter pour plus de détails. Avec
312 <code>edit</code>, les deux arguments <var>valeur</var> et
313 <var>remplacement</var> sont obligatoires, et correspondent
314 respectivement à une <glossary ref="regex">expression
315 rationnelle</glossary> et à une chaîne de remplacement.</p>
317 <p>La directive <directive>RequestHeader</directive> peut être
318 suivie d'un argument supplémentaire, qui pourra prendre les valeurs
321 <dt><code>early</code></dt>
322 <dd>Spécifie <a href="#early">traitement préalable</a>.</dd>
323 <dt><code>env=[!]<var>variable</var></code></dt>
324 <dd>La directive est appliquée si et seulement si la <a
325 href="../env.html">variable d'environnement</a>
326 <code>variable</code> existe. Un <code>!</code> devant
327 <code>variable</code> inverse le test, et la directive ne
328 s'appliquera alors que si <code>variable</code> n'est pas définie.</dd>
329 <dt><code>expr=<var>expression</var></code></dt>
330 <dd>La directive s'applique si et seulement si <var>expression</var>
331 est évaluée à true. Vous trouverez plus de détails à propos de la
332 syntaxe et de l'évaluation des expressions dans la documentation <a
333 href="../expr.html">ap_expr</a>.</dd>
336 <p>Excepté le cas du mode <a href="#early">précoce</a>, la directive
337 <directive>RequestHeader</directive> est traitée juste avant la
338 prise en compte de la requête par son gestionnaire, au cours de la
339 phase de vérification. Ceci permet la modification des en-têtes
340 générés par le navigateur, ou par les filtres en entrée
347 <description>Configure les en-têtes d'une réponse HTTP</description>
348 <syntax>Header [<var>condition</var>] add|append|echo|edit|edit*|merge|set|setifempty|unset|note
349 <var>en-tête</var> [[expr=]<var>valeur</var>
350 [<var>remplacement</var>]
351 [early|env=[!]<var>variable</var>|expr=<var>expression</var>]]
353 <contextlist><context>server config</context><context>virtual host</context>
354 <context>directory</context><context>.htaccess</context></contextlist>
355 <override>FileInfo</override>
356 <compatibility>SetIfEmpty est disponible depuis la version 2.4.7 du
357 serveur HTTP Apache ; le paramètre expr=valeur a été introduit avec la
358 version 2.4.10</compatibility>
361 <p>Cette directive permet de remplacer, fusionner, ou
362 supprimer des en-têtes de réponse HTTP. L'en-tête est modifié juste
363 après que le gestionnaire de contenu et les filtres en sortie ne
364 s'exécutent, ce qui permet la modification des en-têtes
367 <p>L'argument optionnel <var>condition</var> permet de déterminer
368 sur quelle table interne d'en-têtes de réponses cette directive va
369 opérer. En dépit du nom, la valeur par défaut de
370 <code>onsuccess</code> ne limite <em>pas</em> une <var>action</var>
371 aux réponses avec un code d'état de 2xx. Les en-têtes définis sous
372 cette condition sont encore utilisés quand par exemple une requête
373 est mandatée ou générée par un programme CGI avec <em>succès</em>,
374 et ceci même dans le cas où ils ont généré un code d'échec.</p>
376 <p>Lorsque votre action est une fonction agissant sur un en-tête
377 existant, vous pourrez être amené à spécifier une condition
378 <code>always</code>, en fonction de la table interne dans laquelle
379 l'en-tête original a été défini. La table qui correspond à
380 <code>always</code> est utilisée pour les réponses d'erreur générées
381 localement ainsi que pour les réponses qui ont abouti.
382 Notez aussi que la répétition
383 de cette directive avec les deux conditions peut être pertinente
384 dans certains scénarios, car <code>always</code> n'englobe pas
385 <code>onsuccess</code> en ce qui concerne les en-têtes existants :</p>
388 <li>Vous ajoutez un en-tête à une réponse
389 générée localement et échouée (non-2xx),
390 une redirection par exemple, et dans ce cas, seule la table
391 correspondant à <code>always</code> est utilisée dans la réponse
393 <li>Vous modifiez ou supprimez un en-tête généré par un script
394 CGI, et dans ce cas, les scripts CGI sont dans la table
395 correspondant à <code>always</code> et non dans la table par
397 <li>Vous modifiez ou supprimez un en-tête généré par tel ou tel
398 composant du serveur, mais cet en-tête n'est pas trouvé par la
399 condition par défaut <code>onsuccess</code>.</li>
402 <p>Outre le paramètre <var>condition</var> décrit ci-dessus, vous
403 pouvez limiter une action en fonction de codes d'état HTTP, par
404 exemple pour les requêtes mandatées ou générées par un programme
405 CGI. Voir l'exemple qui utilise %{REQUEST_STATUS} dans la section
408 <p>L'action que cette directive provoque est déterminée par le
409 premier argument (ou par le second argument si une
410 <var>condition</var> est spécifiée). Il peut prendre
411 une des valeurs suivantes :</p>
414 <dt><code>add</code></dt>
415 <dd>L'en-tête est ajouté au jeu d'en-têtes préexistant, même s'il
416 existe déjà. Ceci peut conduire à la présence de deux (ou plusieurs)
417 en-têtes possèdant le même nom et donc induire des conséquences
418 imprévues ; en général, il est préférable d'utiliser
419 <code>set</code>, <code>append</code> ou <code>merge</code>.</dd>
421 <dt><code>append</code></dt>
422 <dd>La valeur d'en-tête est ajoutée à tout en-tête existant de même
423 nom. Lorsqu'une nouvelle valeur est ainsi ajoutée, elle est séparée
424 de celles qui sont déjà présentes par une virgule. Il s'agit de la
425 méthode HTTP standard permettant d'affecter plusieurs valeurs à un
428 <dt><code>echo</code></dt>
429 <dd>Les en-têtes de la requête possédant le nom spécifié sont
430 recopiés vers les en-têtes de la réponse. <var>en-tête</var> peut
431 être une <glossary ref="regex">expression rationnelle</glossary>, et
432 <var>valeur</var> ne doit pas être présent.</dd>
434 <dt><code>edit</code></dt>
435 <dt><code>edit*</code></dt>
436 <dd>Si l'en-tête existe, sa valeur est modifiée en fonction d'une
437 <glossary ref="regex">expression rationnelle</glossary> de type
438 recherche/remplacement. L'argument <var>valeur</var> est une
439 <glossary ref="regex">expression rationnelle</glossary>, et
440 l'argument <var>remplacement</var> une chaîne de caractères de
441 remplacement qui peut contenir des références
442 arrières ou des spécificateurs de format. La forme <code>edit</code> n'effectuera une
443 recherche/remplacement qu'une seule fois dans la valeur de
444 l'en-tête, alors que la forme <code>edit*</code> en effectuera autant
445 que le nombre d'apparition de la chaîne à remplacer.</dd>
447 <dt><code>merge</code></dt>
448 <dd>La valeur d'en-tête est ajoutée à tout en-tête de même nom, sauf
449 si elle apparaît déjà dans la liste des valeurs préexistantes de
450 l'en-tête séparées par des virgules. Lorsqu'une nouvelle valeur est
451 ainsi ajoutée, elle est séparée de celles qui sont déjà présentes
452 par une virgule. Il s'agit de la méthode HTTP standard permettant
453 d'affecter plusieurs valeurs à un en-tête. Les valeurs sont
454 comparées en tenant compte de la casse, et après le traitement de
455 tous les spécificateurs de format. Une valeur entourée de guillemets
456 est considérée comme différente de la même valeur mais sans
459 <dt><code>set</code></dt>
460 <dd>L'en-tête est défini, remplaçant tout en-tête préexistant avec
461 le même nom. L'argument <var>valeur</var> peut être une chaîne de
464 <dt><code>setifempty</code></dt>
465 <dd>L'en-tête est défini, mais seulement s'il n'existe
466 aucun en-tête avec le même nom.
468 L'en-tête Content-Type est un cas particulier car il est possible que sa
469 valeur ait été déterminée mais que l'en-tête ne soit pas présent dans la
470 réponse lorsque <code>setifempty</code> est évalué. Dans ce cas, il est
471 préférable d'utiliser <code>set</code> comme dans l'exemple suivant :
472 <highlight language="config">
473 Header set Content-Type "text/plain" "expr=-z %{CONTENT_TYPE}"
477 <dt><code>unset</code></dt>
478 <dd>L'en-tête est supprimé s'il existe. Si plusieurs en-têtes
479 possèdent le même nom, ils seront tous supprimés. L'argument
480 <var>value</var> ne doit pas apparaître.</dd>
482 <dt><code>note</code></dt>
483 <dd>La valeur de l'<var>en-tête</var> considéré est copiée dans une
484 note interne dont le nom est spécifié via l'argument
485 <var>valeur</var>. Ceci permet de journaliser la valeur d'un en-tête
486 envoyé par un programme CGI ou une ressource mandatée, même s'il
487 est prévu de l'effacer.<br />
488 Disponible à partir de la version 2.4.7 du serveur HTTP Apache.</dd>
492 <p>Cet argument est suivi d'un nom d'<var>en-tête</var> qui peut se
493 terminer par un caractère ':', mais ce n'est pas obligatoire. La
494 casse est ignorée avec <code>set</code>, <code>append</code>,
495 <code>merge</code>, <code>add</code>, <code>unset</code> et
496 <code>edit</code>. Le nom d'<var>en-tête</var> est sensible à la
497 casse pour <code>echo</code> et peut être une <glossary
498 ref="regex">expression rationnelle</glossary>.</p>
500 <p>Avec <code>set</code>, <code>append</code>, <code>merge</code> et
501 <code>add</code>, une <var>valeur</var> est spécifiée comme
502 argument suivant. Si <var>valeur</var> contient des espaces, elle
503 doit être entourée de guillemets. <var>valeur</var> peut être une
504 chaîne de caractères, une chaîne contenant des spécificateurs de
505 format propres à <module>mod_headers</module> (et des caractères
506 littéraux), ou une expression <a href="../expr.html">ap_expr</a>
507 préfixée par <em>expr=</em>.</p>
509 <p><var>valeur</var> supporte les spécificateurs de format suivants :</p>
511 <table border="1" style="zebra">
512 <columnspec><column width=".25"/><column width=".75"/></columnspec>
513 <tr><th>Format</th><th>Description</th></tr>
514 <tr><td><code>%%</code></td>
515 <td>Le caractère pourcentage</td></tr>
517 <tr><td><code>%t</code></td>
518 <td>Le moment de réception de la requête en temps
519 universel coordonné depuis le temps epoch (Jan. 1, 1970) et
520 exprimé en microsecondes. La valeur est précédée de
521 <code>t=</code>.</td></tr>
523 <tr><td><code>%D</code></td>
524 <td>Le temps écoulé entre la réception de la requête et l'envoi
525 des en-têtes sur le réseau. Il s'agit de la durée de traitement
526 de la requête. La valeur est précédée de <code>D=</code>. La
527 valeur est exprimée en microsecondes.</td></tr>
529 <tr><td><code>%l</code></td>
530 <td>La charge moyenne courante du serveur proprement dit. Ce
531 sont les valeurs obtenues par <code>getloadavg()</code> qui
532 représentent la charge moyenne courante, sur 5 minutes et sur 15
533 minutes. Chaque valeur est précédée de <code>l=</code> et
534 séparée de la suivante par un <code>/</code>.<br />
535 Disponible depuis la version 2.4.4 du serveur HTTP Apache.
538 <tr><td><code>%i</code></td>
539 <td>Le pourcentage courant de httpd au repos (de 0 à 100)
540 en se basant sur le nombre de processus et threads disponibles.
541 La valeur est précédée de <code>i=</code>.<br />
542 Disponible depuis la version 2.4.4 du serveur HTTP Apache.
545 <tr><td><code>%b</code></td>
546 <td>Le pourcentage courant de httpd utilisé (de 0 à 100)
547 en se basant sur le nombre de processus et threads disponibles.
548 La valeur est précédée de <code>b=</code>.<br />
549 Disponible depuis la version 2.4.4 du serveur HTTP Apache.
552 <tr><td><code>%{NOM_VARIABLE}e</code></td>
553 <td>Le contenu de la <a href="../env.html">variable
554 d'environnement</a> <code>NOM_VARIABLE</code>.</td></tr>
556 <tr><td><code>%{NOM_VARIABLE}s</code></td>
557 <td>Le contenu de la <a href="../env.html">variable
558 d'environnement SSL</a> <code>NOM_VARIABLE</code>, si
559 <module>mod_ssl</module> est activé.</td></tr>
563 <note><title>Note</title>
564 <p>Le spécificateur de format <code>%s</code> est disponible
565 depuis la version 2.1 d'Apache ; il peut être utilisé à la place
566 de <code>%e</code> pour éviter de devoir spécifier
567 <code>SSLOptions +StdEnvVars</code>. Cependant, si
568 <code>SSLOptions +StdEnvVars</code> doit tout de même être
569 spécifié pour une raison quelconque, <code>%e</code> sera plus
570 efficace que <code>%s</code>.</p>
573 <note><title>Note à propos des valeurs des expressions</title>
574 <p>Lorsque le paramètre valeur utilise l'interpréteur <a
575 href="../expr.html">ap_expr</a>, certaines syntaxes d'expressions
576 seront différentes des exemples qui évaluent des expressions
577 <em>booléennes</em> telles que <If> :</p>
579 <li>Le point de départ de la syntaxe est 'string' au lieu de
581 <li>Les appels de fonction utilisent la syntaxe %{funcname:arg} au
582 lieu de funcname(arg).</li>
583 <li>Les fonctions multi-arguments ne sont pas encore disponibles
584 depuis le point de départ 'string'.</li>
585 <li>Il faut mettre entre guillemets l'ensemble du paramètre, comme
586 dans l'exemple suivant :
587 <highlight language="config">
588 Header set foo-checksum "expr=%{md5:foo}"
595 <p><code>edit</code>nécessite les deux arguments
596 <var>valeur</var>, qui est une <glossary ref="regex">expression
597 rationnelle</glossary>, et une chaîne additionnelle
598 <var>remplacement</var>. Depuis la version 2.4.7, la chaîne de
599 remplacement peut aussi
600 contenir des spécificateurs de format.</p>
602 <p>La directive <directive>Header</directive> peut être suivie d'un
603 argument additionnel qui peut prendre les valeurs suivantes :</p>
606 <dt><code>early</code></dt>
607 <dd>Spécifie <a href="#early">traitement préalable</a>.</dd>
608 <dt><code>env=[!]<var>variable</var></code></dt>
609 <dd>La directive est appliquée si et seulement si la <a
610 href="../env.html">variable d'environnement</a>
611 <code>variable</code> existe. Un <code>!</code> devant
612 <code>variable</code> inverse le test, et la directive ne
613 s'appliquera alors que si <code>variable</code> n'est pas définie.</dd>
614 <dt><code>expr=<var>expression</var></code></dt>
615 <dd>La directive s'applique si et seulement si <var>expression</var>
616 est évaluée à true. Vous trouverez plus de détails à propos de la
617 syntaxe et de l'évaluation des expressions dans la documentation <a
618 href="../expr.html">ap_expr</a>.
619 <highlight language="config">
620 # Cet exemple retarde l'évaluation de la clause de condition par
621 # rapport à <If>
622 Header always set CustomHeader my-value "expr=%{REQUEST_URI} =~ m#^/special_path.php$#"
627 <p>Excepté le cas du mode <a href="#early">précoce</a>, les
628 directives <directive>Header</directive> sont traitées juste avant
629 l'envoi de la réponse sur le réseau. Cela signifie qu'il est
630 possible de définir et/ou modifier la plupart des en-têtes, à
631 l'exception de certains en-têtes qui sont ajoutés par le filtre
632 d'en-tête HTTP. Avant la version 2.2.12, il n'était pas
633 possible de modifier l'en-tête Content-Type avec cette directive.</p>