]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_headers.html.en
update transformation
[apache] / docs / manual / mod / mod_headers.html.en
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>mod_headers - Apache HTTP Server</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <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" />
12 <script src="../style/scripts/prettify.min.js" type="text/javascript">
13 </script>
14
15 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
16 <body>
17 <div id="page-header">
18 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
19 <p class="apache">Apache HTTP Server Version 2.5</p>
20 <img alt="" src="../images/feather.gif" /></div>
21 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
22 <div id="path">
23 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
24 <div id="page-content">
25 <div id="preamble"><h1>Apache Module mod_headers</h1>
26 <div class="toplang">
27 <p><span>Available Languages: </span><a href="../en/mod/mod_headers.html" title="English">&nbsp;en&nbsp;</a> |
28 <a href="../fr/mod/mod_headers.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
29 <a href="../ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
30 <a href="../ko/mod/mod_headers.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
31 </div>
32 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Customization of HTTP request and response
33 headers</td></tr>
34 <tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
35 <tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>headers_module</td></tr>
36 <tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_headers.c</td></tr></table>
37 <h3>Summary</h3>
38
39     <p>This module provides directives to control and modify HTTP
40     request and response headers. Headers can be merged, replaced
41     or removed.</p>
42 </div>
43 <div id="quickview"><h3 class="directives">Directives</h3>
44 <ul id="toc">
45 <li><img alt="" src="../images/down.gif" /> <a href="#header">Header</a></li>
46 <li><img alt="" src="../images/down.gif" /> <a href="#requestheader">RequestHeader</a></li>
47 </ul>
48 <h3>Topics</h3>
49 <ul id="topics">
50 <li><img alt="" src="../images/down.gif" /> <a href="#order">Order of Processing</a></li>
51 <li><img alt="" src="../images/down.gif" /> <a href="#early">Early and Late Processing</a></li>
52 <li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
53 </ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
54 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
55 <div class="section">
56 <h2><a name="order" id="order">Order of Processing</a></h2>
57
58     <p>The directives provided by <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> can
59     occur almost anywhere within the server configuration, and can be
60     limited in scope by enclosing them in <a href="../sections.html">configuration sections</a>.</p>
61
62     <p>Order of processing is important and is affected both by the
63     order in the configuration file and by placement in <a href="../sections.html#mergin">configuration sections</a>. These
64     two directives have a different effect if reversed:</p>
65
66     <pre class="prettyprint lang-config">RequestHeader append MirrorID "mirror 12"
67 RequestHeader unset MirrorID</pre>
68
69
70     <p>This way round, the <code>MirrorID</code> header is not set. If
71     reversed, the MirrorID header is set to "mirror 12".</p>
72 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
73 <div class="section">
74 <h2><a name="early" id="early">Early and Late Processing</a></h2>
75     <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> can be applied either early or late
76     in the request.  The normal mode is late, when <em>Request</em> Headers are
77     set immediately before running the content generator and <em>Response</em>
78     Headers just as the response is sent down the wire.  Always use
79     Late mode in an operational server.</p>
80
81     <p>Early mode is designed as a test/debugging aid for developers.
82     Directives defined using the <code>early</code> keyword are set
83     right at the beginning of processing the request.  This means
84     they can be used to simulate different requests and set up test
85     cases, but it also means that headers may be changed at any time
86     by other modules before generating a Response.</p>
87
88     <p>Because early directives are processed before the request path's
89     configuration is traversed, early headers can only be set in a
90     main server or virtual host context.  Early directives cannot depend
91     on a request path, so they will fail in contexts such as
92     <code>&lt;Directory&gt;</code> or <code>&lt;Location&gt;</code>.</p>
93 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
94 <div class="section">
95 <h2><a name="examples" id="examples">Examples</a></h2>
96
97     <ol>
98       <li>
99         Copy all request headers that begin with "TS" to the
100         response headers:
101
102         <pre class="prettyprint lang-config">Header echo ^TS</pre>
103
104       </li>
105
106       <li>
107         Add a header, <code>MyHeader</code>, to the response including a
108         timestamp for when the request was received and how long it
109         took to begin serving the request. This header can be used by
110         the client to intuit load on the server or in isolating
111         bottlenecks between the client and the server.
112
113         <pre class="prettyprint lang-config">Header set MyHeader "%D %t"</pre>
114
115
116         <p>results in this header being added to the response:</p>
117
118         <div class="example"><p><code>
119           MyHeader: D=3775428 t=991424704447256
120         </code></p></div>
121       </li>
122
123       <li>
124         Say hello to Joe
125
126         <pre class="prettyprint lang-config">Header set MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."</pre>
127
128
129         <p>results in this header being added to the response:</p>
130
131         <div class="example"><p><code>
132           MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
133           to serve this request.
134         </code></p></div>
135       </li>
136
137       <li>
138         Conditionally send <code>MyHeader</code> on the response if and
139         only if header <code>MyRequestHeader</code> is present on the request.
140         This is useful for constructing headers in response to some client
141         stimulus. Note that this example requires the services of the
142         <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> module.
143
144         <pre class="prettyprint lang-config">SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader
145 Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader</pre>
146
147
148         <p>If the header <code>MyRequestHeader: myvalue</code> is present on
149         the HTTP request, the response will contain the following header:</p>
150
151         <div class="example"><p><code>
152           MyHeader: D=3775428 t=991424704447256 mytext
153         </code></p></div>
154       </li>
155
156       <li>
157         Enable DAV to work with Apache running HTTP through SSL hardware
158         (<a href="http://svn.haxx.se/users/archive-2006-03/0549.shtml">problem
159         description</a>) by replacing <var>https:</var> with
160         <var>http:</var> in the <var>Destination</var> header:
161
162         <pre class="prettyprint lang-config">RequestHeader edit Destination ^https: http: early</pre>
163
164       </li>
165
166       <li>
167         Set the same header value under multiple non-exclusive conditions,
168         but do not duplicate the value in the final header.
169         If all of the following conditions applied to a request (i.e.,
170         if the <code>CGI</code>, <code>NO_CACHE</code> and
171         <code>NO_STORE</code> environment variables all existed for the
172         request):
173
174         <pre class="prettyprint lang-config">Header merge Cache-Control no-cache env=CGI
175 Header merge Cache-Control no-cache env=NO_CACHE
176 Header merge Cache-Control no-store env=NO_STORE</pre>
177
178
179         <p>then the response would contain the following header:</p>
180
181         <div class="example"><p><code>
182           Cache-Control: no-cache, no-store
183         </code></p></div>
184
185         <p>If <code>append</code> was used instead of <code>merge</code>,
186         then the response would contain the following header:</p>
187
188         <div class="example"><p><code>
189           Cache-Control: no-cache, no-cache, no-store
190         </code></p></div>
191       </li>
192       <li>
193         Set a test cookie if and only if the client didn't send us a cookie
194         <pre class="prettyprint lang-config">Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"</pre>
195
196       </li>
197     </ol>
198 </div>
199 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
200 <div class="directive-section"><h2><a name="Header" id="Header">Header</a> <a name="header" id="header">Directive</a></h2>
201 <table class="directive">
202 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure HTTP response headers</td></tr>
203 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Header [<var>condition</var>] add|append|echo|edit|edit*|merge|set|unset|note
204 <var>header</var> [<var>[expr=]value]</var>] [<var>replacement</var>]
205 [early|env=[!]<var>variable</var>]|expr=<var>expression</var>]
206 </code></td></tr>
207 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
208 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
209 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
210 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr>
211 </table>
212     <p>This directive can replace, merge or remove HTTP response
213     headers. The header is modified just after the content handler
214     and output filters are run, allowing outgoing headers to be
215     modified.</p>
216
217     <p> The optional <var>condition</var> argument determines which internal
218     table of responses headers this directive will operate against.  Other
219     components of the server may have stored their response headers in either
220     the table that corresponds to <code>onsuccess</code> or the table that
221     corresponds to <code>always</code>.  "Always" in this context refers to
222     whether headers you add will be sent during both a successful and unsucessful
223     response, but if your action is a function of an existing header, you
224     will have to read on for further complications.</p>
225
226     <p> The default value of <code>onsuccess</code> may need to be changed to
227     <code>always</code> under the circumstances similar to those listed below.
228     Note also that repeating this directive with both conditions makes sense in
229     some scenarios because <code>always</code> is not a superset of
230     <code>onsuccess</code> with respect to existing headers:</p>
231
232     <ul>
233        <li> You're adding a header to a non-success (non-2xx) response, such
234             as a redirect, in which case only the table corresponding to
235             <code>always</code> is used in the ultimate response.</li>
236        <li> You're modifying or removing a header generated by a CGI script,
237             in which case the CGI scripts are in the table corresponding to
238             <code>always</code> and not in the default table.</li>
239        <li> You're modifying or removing a header generated by some piece of
240             the server but that header is not being found by the default
241             <code>onsuccess</code> condition.</li>
242     </ul>
243
244     <p>The action it performs is determined by the first
245     argument (second argument if a <var>condition</var> is specified).
246     This can be one of the following values:</p>
247
248     <dl>
249     <dt><code>add</code></dt>
250     <dd>The response header is added to the existing set of headers,
251     even if this header already exists. This can result in two
252     (or more) headers having the same name. This can lead to
253     unforeseen consequences, and in general <code>set</code>,
254     <code>append</code> or <code>merge</code> should be used instead.</dd>
255
256     <dt><code>append</code></dt>
257     <dd>The response header is appended to any existing header of
258     the same name. When a new value is merged onto an existing
259     header it is separated from the existing header with a comma.
260     This is the HTTP standard way of giving a header multiple values.</dd>
261
262     <dt><code>echo</code></dt>
263     <dd>Request headers with this name are echoed back in the
264     response headers. <var>header</var> may be a
265     <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>.
266     <var>value</var> must be omitted.</dd>
267
268     <dt><code>edit</code></dt>
269     <dt><code>edit*</code></dt>
270     <dd>If this response header exists, its value is transformed according
271     to a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>
272     search-and-replace.  The <var>value</var> argument is a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>, and the <var>replacement</var>
273     is a replacement string, which may contain backreferences or format specifiers.
274     The <code>edit</code> form will match and replace exactly once
275     in a header value, whereas the <code>edit*</code> form will replace
276     <em>every</em> instance of the search pattern if it appears more
277     than once.</dd>
278
279     <dt><code>merge</code></dt>
280     <dd>The response header is appended to any existing header of
281     the same name, unless the value to be appended already appears in the
282     header's comma-delimited list of values.  When a new value is merged onto
283     an existing header it is separated from the existing header with a comma.
284     This is the HTTP standard way of giving a header multiple values.
285     Values are compared in a case sensitive manner, and after
286     all format specifiers have been processed.  Values in double quotes
287     are considered different from otherwise identical unquoted values.</dd>
288
289     <dt><code>set</code></dt>
290     <dd>The response header is set, replacing any previous header
291     with this name. The <var>value</var> may be a format string.</dd>
292
293     <dt><code>setifempty</code></dt>
294     <dd>The request header is set, but only if there is no previous header
295     with this name</dd>
296
297     <dt><code>unset</code></dt>
298     <dd>The response header of this name is removed, if it exists.
299     If there are multiple headers of the same name, all will be
300     removed. <var>value</var> must be omitted.</dd>
301
302     <dt><code>note</code></dt>
303     <dd>The value of the named response <var>header</var> is copied into an
304     internal note whose name is given by <var>value</var>.  This is useful
305     if a header sent by a CGI or proxied resource is configured to be unset
306     but should also be logged.</dd>
307
308     </dl>
309
310     <p>This argument is followed by a <var>header</var> name, which
311     can include the final colon, but it is not required. Case is
312     ignored for <code>set</code>, <code>append</code>, <code>merge</code>,
313     <code>add</code>, <code>unset</code> and <code>edit</code>.
314     The <var>header</var> name for <code>echo</code>
315     is case sensitive and may be a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular
316     expression</a>.</p>
317
318     <p>For <code>set</code>, <code>append</code>, <code>merge</code> and
319     <code>add</code> a <var>value</var> is specified as the next argument.
320     If <var>value</var>
321     contains spaces, it should be surrounded by double quotes.
322     <var>value</var> may be a character string, a string containing 
323     <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> specific format specifiers (and character 
324     literals), or an <a href="../expr.html">ap_expr</a> expression prefixed
325     with <em>expr=</em></p>
326     
327     <p> The following format specifiers are supported in <var>value</var>:</p>
328
329     <table class="bordered"><tr class="header"><th>Format</th><th>Description</th></tr>
330 <tr><td><code>%%</code></td>
331         <td>The percent sign</td></tr>
332 <tr class="odd"><td><code>%t</code></td>
333         <td>The time the request was received in Universal Coordinated Time
334         since the epoch (Jan. 1, 1970) measured in microseconds. The value
335         is preceded by <code>t=</code>.</td></tr>
336 <tr><td><code>%D</code></td>
337         <td>The time from when the request was received to the time the
338         headers are sent on the wire. This is a measure of the duration
339         of the request. The value is preceded by <code>D=</code>.
340         The value is measured in microseconds.</td></tr>
341 <tr class="odd"><td><code>%l</code></td>
342         <td>The current load averages of the actual server itself. It is
343         designed to expose the values obtained by <code>getloadavg()</code>
344         and this represents the current load average, the 5 minute average, and
345         the 15 minute average. The value is preceded by <code>l=</code> with each
346         average separated by <code>/</code>.
347         </td></tr>
348 <tr><td><code>%i</code></td>
349         <td>The current idle percentage of httpd (0 to 100) based on available
350         processes and threads. The value is preceded by <code>i=</code>.
351         </td></tr>
352 <tr class="odd"><td><code>%b</code></td>
353         <td>The current busy percentage of httpd (0 to 100) based on available
354         processes and threads. The value is preceded by <code>b=</code>.
355         </td></tr>
356 <tr><td><code>%{VARNAME}e</code></td>
357         <td>The contents of the <a href="../env.html">environment
358         variable</a> <code>VARNAME</code>.</td></tr>
359 <tr class="odd"><td><code>%{VARNAME}s</code></td>
360         <td>The contents of the <a href="mod_ssl.html#envvars">SSL environment
361         variable</a> <code>VARNAME</code>, if <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is enabled.</td></tr>
362 </table>
363
364     <div class="note"><h3>Note</h3>
365       <p>The <code>%s</code> format specifier is only available in
366       Apache 2.1 and later; it can be used instead of <code>%e</code>
367       to avoid the overhead of enabling <code>SSLOptions
368       +StdEnvVars</code>.  If <code>SSLOptions +StdEnvVars</code> must
369       be enabled anyway for some other reason, <code>%e</code> will be
370       more efficient than <code>%s</code>.</p>
371     </div>
372
373     <p>For <code>edit</code> there is both a <var>value</var> argument
374     which is a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>,
375     and an additional <var>replacement</var> string. The replacement string
376     may also contain format specifiers.</p>
377
378     <p>The <code class="directive">Header</code> directive may be followed by
379     an additional argument, which may be any of:</p>
380     <dl>
381     <dt><code>early</code></dt>
382     <dd>Specifies <a href="#early">early processing</a>.</dd>
383     <dt><code>env=[!]<var>varname</var></code></dt>
384     <dd>The directive is applied if and only if the <a href="../env.html">environment variable</a> <code>varname</code> exists.
385         A <code>!</code> in front of <code>varname</code> reverses the test,
386         so the directive applies only if <code>varname</code> is unset.</dd>
387     <dt><code>expr=<var>expression</var></code></dt>
388     <dd>The directive is applied if and only if <var>expression</var>
389         evaluates to true. Details of expression syntax and evaluation are
390         documented in the <a href="../expr.html">ap_expr</a> documentation.</dd>
391     </dl>
392
393     <p>Except in <a href="#early">early</a> mode, the
394     <code class="directive">Header</code> directives are processed just
395     before the response is sent to the network. These means that it is
396     possible to set and/or override most headers, except for those headers
397     added by the HTTP header filter, such as Content-Type.</p>
398
399 </div>
400 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
401 <div class="directive-section"><h2><a name="RequestHeader" id="RequestHeader">RequestHeader</a> <a name="requestheader" id="requestheader">Directive</a></h2>
402 <table class="directive">
403 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure HTTP request headers</td></tr>
404 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RequestHeader add|append|edit|edit*|merge|set|unset
405 <var>header</var> [<var>value</var>] [<var>replacement</var>]
406 [early|env=[!]<var>variable</var>]|expr=<var>expression</var>]
407 </code></td></tr>
408 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
409 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
410 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
411 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr>
412 </table>
413     <p>This directive can replace, merge, change or remove HTTP request
414     headers. The header is modified just before the content handler
415     is run, allowing incoming headers to be modified. The action it
416     performs is determined by the first argument. This can be one
417     of the following values:</p>
418
419     <dl>
420
421     <dt><code>add</code></dt>
422     <dd>The request header is added to the existing set of headers,
423     even if this header already exists. This can result in two
424     (or more) headers having the same name. This can lead to
425     unforeseen consequences, and in general <code>set</code>,
426     <code>append</code> or <code>merge</code> should be used instead.</dd>
427
428     <dt><code>append</code></dt>
429     <dd>The request header is appended to any existing header of the
430     same name. When a new value is merged onto an existing header
431     it is separated from the existing header with a comma. This
432     is the HTTP standard way of giving a header multiple
433     values.</dd>
434
435     <dt><code>edit</code></dt>
436     <dt><code>edit*</code></dt>
437     <dd>If this request header exists, its value is transformed according
438     to a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>
439     search-and-replace.  The <var>value</var> argument is a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>, and the <var>replacement</var>
440     is a replacement string, which may contain backreferences or format specifiers.
441     The <code>edit</code> form will match and replace exactly once
442     in a header value, whereas the <code>edit*</code> form will replace
443     <em>every</em> instance of the search pattern if it appears more
444     than once.</dd>
445
446     <dt><code>merge</code></dt>
447     <dd>The request header is appended to any existing header of
448     the same name, unless the value to be appended already appears in the
449     existing header's comma-delimited list of values.  When a new value is
450     merged onto an existing header it is separated from the existing header
451     with a comma.  This is the HTTP standard way of giving a header multiple
452     values.  Values are compared in a case sensitive manner, and after
453     all format specifiers have been processed.  Values in double quotes
454     are considered different from otherwise identical unquoted values.</dd>
455
456     <dt><code>set</code></dt>
457     <dd>The request header is set, replacing any previous header
458     with this name</dd>
459   
460     <dt><code>setifempty</code></dt>
461     <dd>The request header is set, but only if there is no previous header
462     with this name</dd>
463
464     <dt><code>unset</code></dt>
465     <dd>The request header of this name is removed, if it exists. If
466     there are multiple headers of the same name, all will be removed.
467     <var>value</var> must be omitted.</dd>
468     </dl>
469
470     <p>This argument is followed by a header name, which can
471     include the final colon, but it is not required. Case is
472     ignored. For <code>set</code>, <code>append</code>, <code>merge</code> and
473     <code>add</code> a <var>value</var> is given as the third argument. If a
474     <var>value</var> contains spaces, it should be surrounded by double
475     quotes. For <code>unset</code>, no <var>value</var> should be given.
476     <var>value</var> may be a character string, a string containing format
477     specifiers or a combination of both. The supported format specifiers
478     are the same as for the <code class="directive"><a href="#header">Header</a></code>,
479     please have a look there for details.  For <code>edit</code> both
480     a <var>value</var> and a <var>replacement</var> are required, and are
481     a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a> and a
482     replacement string respectively.</p>
483
484     <p>The <code class="directive">RequestHeader</code> directive may be followed by
485     an additional argument, which may be any of:</p>
486     <dl>
487     <dt><code>early</code></dt>
488     <dd>Specifies <a href="#early">early processing</a>.</dd>
489     <dt><code>env=[!]<var>varname</var></code></dt>
490     <dd>The directive is applied if and only if the <a href="../env.html">environment variable</a> <code>varname</code> exists.
491         A <code>!</code> in front of <code>varname</code> reverses the test,
492         so the directive applies only if <code>varname</code> is unset.</dd>
493     <dt><code>expr=<var>expression</var></code></dt>
494     <dd>The directive is applied if and only if <var>expression</var>
495         evaluates to true. Details of expression syntax and evaluation are
496         documented in the <a href="../expr.html">ap_expr</a> documentation.</dd>
497     </dl>
498
499     <p>Except in <a href="#early">early</a> mode, the
500     <code class="directive">RequestHeader</code> directive is processed
501     just before the request is run by its handler in the fixup phase.
502     This should allow headers generated by the browser, or by Apache
503     input filters to be overridden or modified.</p>
504
505 </div>
506 </div>
507 <div class="bottomlang">
508 <p><span>Available Languages: </span><a href="../en/mod/mod_headers.html" title="English">&nbsp;en&nbsp;</a> |
509 <a href="../fr/mod/mod_headers.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
510 <a href="../ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
511 <a href="../ko/mod/mod_headers.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
512 </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">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
513 <script type="text/javascript"><!--//--><![CDATA[//><!--
514 var comments_shortname = 'httpd';
515 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_headers.html';
516 (function(w, d) {
517     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
518         d.write('<div id="comments_thread"><\/div>');
519         var s = d.createElement('script');
520         s.type = 'text/javascript';
521         s.async = true;
522         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
523         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
524     }
525     else {
526         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
527     }
528 })(window, document);
529 //--><!]]></script></div><div id="footer">
530 <p class="apache">Copyright 2014 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
531 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
532 if (typeof(prettyPrint) !== 'undefined') {
533     prettyPrint();
534 }
535 //--><!]]></script>
536 </body></html>