]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_headers.html.en
Fix spelling and grammar errors.
[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 Version 2.5</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 class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> or
93     <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>.</p>
94 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
95 <div class="section">
96 <h2><a name="examples" id="examples">Examples</a></h2>
97
98     <ol>
99       <li>
100         Copy all request headers that begin with "TS" to the
101         response headers:
102
103         <pre class="prettyprint lang-config">Header echo ^TS</pre>
104
105       </li>
106
107       <li>
108         Add a header, <code>MyHeader</code>, to the response including a
109         timestamp for when the request was received and how long it
110         took to begin serving the request. This header can be used by
111         the client to intuit load on the server or in isolating
112         bottlenecks between the client and the server.
113
114         <pre class="prettyprint lang-config">Header set MyHeader "%D %t"</pre>
115
116
117         <p>results in this header being added to the response:</p>
118
119         <div class="example"><p><code>
120           MyHeader: D=3775428 t=991424704447256
121         </code></p></div>
122       </li>
123
124       <li>
125         Say hello to Joe
126
127         <pre class="prettyprint lang-config">Header set MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."</pre>
128
129
130         <p>results in this header being added to the response:</p>
131
132         <div class="example"><p><code>
133           MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
134           to serve this request.
135         </code></p></div>
136       </li>
137
138       <li>
139         Conditionally send <code>MyHeader</code> on the response if and
140         only if header <code>MyRequestHeader</code> is present on the request.
141         This is useful for constructing headers in response to some client
142         stimulus. Note that this example requires the services of the
143         <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> module.
144
145         <pre class="prettyprint lang-config">SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader
146 Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader</pre>
147
148
149         <p>If the header <code>MyRequestHeader: myvalue</code> is present on
150         the HTTP request, the response will contain the following header:</p>
151
152         <div class="example"><p><code>
153           MyHeader: D=3775428 t=991424704447256 mytext
154         </code></p></div>
155       </li>
156
157       <li>
158         Enable DAV to work with Apache running HTTP through SSL hardware
159         (<a href="http://svn.haxx.se/users/archive-2006-03/0549.shtml">problem
160         description</a>) by replacing <var>https:</var> with
161         <var>http:</var> in the <var>Destination</var> header:
162
163         <pre class="prettyprint lang-config">RequestHeader edit Destination ^https: http: early</pre>
164
165       </li>
166
167       <li>
168         Set the same header value under multiple nonexclusive conditions,
169         but do not duplicate the value in the final header.
170         If all of the following conditions applied to a request (i.e.,
171         if the <code>CGI</code>, <code>NO_CACHE</code> and
172         <code>NO_STORE</code> environment variables all existed for the
173         request):
174
175         <pre class="prettyprint lang-config">Header merge Cache-Control no-cache env=CGI
176 Header merge Cache-Control no-cache env=NO_CACHE
177 Header merge Cache-Control no-store env=NO_STORE</pre>
178
179
180         <p>then the response would contain the following header:</p>
181
182         <div class="example"><p><code>
183           Cache-Control: no-cache, no-store
184         </code></p></div>
185
186         <p>If <code>append</code> was used instead of <code>merge</code>,
187         then the response would contain the following header:</p>
188
189         <div class="example"><p><code>
190           Cache-Control: no-cache, no-cache, no-store
191         </code></p></div>
192       </li>
193       <li>
194         Set a test cookie if and only if the client didn't send us a cookie
195         <pre class="prettyprint lang-config">Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"</pre>
196
197       </li>
198       <li>
199         Append a Caching header for responses with a HTTP status code of 200
200         <pre class="prettyprint lang-config">Header append Cache-Control s-maxage=600 "expr=%{REQUEST_STATUS} == 200"</pre>
201
202       </li>
203
204     </ol>
205 </div>
206 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
207 <div class="directive-section"><h2><a name="Header" id="Header">Header</a> <a name="header" id="header">Directive</a></h2>
208 <table class="directive">
209 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure HTTP response headers</td></tr>
210 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Header [<var>condition</var>] add|append|echo|edit|edit*|merge|set|setifempty|unset|note
211 <var>header</var> [[expr=]<var>value</var> [<var>replacement</var>]
212 [early|env=[!]<var>varname</var>|expr=<var>expression</var>]]
213 </code></td></tr>
214 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
215 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
216 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
217 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr>
218 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>SetIfEmpty available in 2.4.7 and later, expr=value 
219 available in 2.4.10 and later</td></tr>
220 </table>
221     <p>This directive can replace, merge or remove HTTP response
222     headers. The header is modified just after the content handler
223     and output filters are run, allowing outgoing headers to be
224     modified.</p>
225
226     <p> The optional <var>condition</var> argument determines which internal
227     table of responses headers this directive will operate against. Despite the
228     name, the default value of <code>onsuccess</code> does <em>not</em> limit 
229     an <var>action</var> to responses with a 2xx status code.  Headers set under
230     this condition are still used when, for example, a request is <em>successfully</em>
231     proxied or generated by CGI, even when they have generated a failing status code.</p>
232
233     <p>When your action is a function of an existing header, you may need to specify
234     a condition of <code>always</code>, depending on which internal table the
235     original header was set in.  The table that corresponds to <code>always</code> is
236     used for locally generated error responses as well as successful responses.  
237     Note also that repeating this directive with both conditions makes sense in
238     some scenarios because <code>always</code> is not a superset of
239     <code>onsuccess</code> with respect to existing headers:</p>
240
241     <ul>
242        <li> You're adding a header to a locally generated non-success (non-2xx) response, such
243             as a redirect, in which case only the table corresponding to
244             <code>always</code> is used in the ultimate response.</li>
245        <li> You're modifying or removing a header generated by a CGI script,
246             in which case the CGI scripts are in the table corresponding to
247             <code>always</code> and not in the default table.</li>
248        <li> You're modifying or removing a header generated by some piece of
249             the server but that header is not being found by the default
250             <code>onsuccess</code> condition.</li>
251     </ul>
252
253     <p>Separately from the <var>condition</var> parameter described above, you 
254     can limit an action based on HTTP status codes for e.g. proxied or CGI 
255     requests. See the example that uses %{REQUEST_STATUS} in the section above.</p>
256
257     <p>The action it performs is determined by the first
258     argument (second argument if a <var>condition</var> is specified).
259     This can be one of the following values:</p>
260
261     <dl>
262     <dt><code>add</code></dt>
263     <dd>The response header is added to the existing set of headers,
264     even if this header already exists. This can result in two
265     (or more) headers having the same name. This can lead to
266     unforeseen consequences, and in general <code>set</code>,
267     <code>append</code> or <code>merge</code> should be used instead.</dd>
268
269     <dt><code>append</code></dt>
270     <dd>The response header is appended to any existing header of
271     the same name. When a new value is merged onto an existing
272     header it is separated from the existing header with a comma.
273     This is the HTTP standard way of giving a header multiple values.</dd>
274
275     <dt><code>echo</code></dt>
276     <dd>Request headers with this name are echoed back in the
277     response headers. <var>header</var> may be a
278     <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>.
279     <var>value</var> must be omitted.</dd>
280
281     <dt><code>edit</code></dt>
282     <dt><code>edit*</code></dt>
283     <dd>If this response header exists, its value is transformed according
284     to a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>
285     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>
286     is a replacement string, which may contain backreferences or format specifiers.
287     The <code>edit</code> form will match and replace exactly once
288     in a header value, whereas the <code>edit*</code> form will replace
289     <em>every</em> instance of the search pattern if it appears more
290     than once.</dd>
291
292     <dt><code>merge</code></dt>
293     <dd>The response header is appended to any existing header of
294     the same name, unless the value to be appended already appears in the
295     header's comma-delimited list of values.  When a new value is merged onto
296     an existing header it is separated from the existing header with a comma.
297     This is the HTTP standard way of giving a header multiple values.
298     Values are compared in a case sensitive manner, and after
299     all format specifiers have been processed.  Values in double quotes
300     are considered different from otherwise identical unquoted values.</dd>
301
302     <dt><code>set</code></dt>
303     <dd>The response header is set, replacing any previous header
304     with this name. The <var>value</var> may be a format string.</dd>
305
306     <dt><code>setifempty</code></dt>
307     <dd>The request header is set, but only if there is no previous header
308     with this name.<br />
309     Available in 2.4.7 and later.</dd>
310
311     <dt><code>unset</code></dt>
312     <dd>The response header of this name is removed, if it exists.
313     If there are multiple headers of the same name, all will be
314     removed. <var>value</var> must be omitted.</dd>
315
316     <dt><code>note</code></dt>
317     <dd>The value of the named response <var>header</var> is copied into an
318     internal note whose name is given by <var>value</var>.  This is useful
319     if a header sent by a CGI or proxied resource is configured to be unset
320     but should also be logged.<br />
321     Available in 2.4.7 and later.</dd>
322
323     </dl>
324
325     <p>This argument is followed by a <var>header</var> name, which
326     can include the final colon, but it is not required. Case is
327     ignored for <code>set</code>, <code>append</code>, <code>merge</code>,
328     <code>add</code>, <code>unset</code> and <code>edit</code>.
329     The <var>header</var> name for <code>echo</code>
330     is case sensitive and may be a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular
331     expression</a>.</p>
332
333     <p>For <code>set</code>, <code>append</code>, <code>merge</code> and
334     <code>add</code> a <var>value</var> is specified as the next argument.
335     If <var>value</var>
336     contains spaces, it should be surrounded by double quotes.
337     <var>value</var> may be a character string, a string containing 
338     <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> specific format specifiers (and character 
339     literals), or an <a href="../expr.html">ap_expr</a> expression prefixed
340     with <em>expr=</em></p>
341     
342     <p> The following format specifiers are supported in <var>value</var>:</p>
343
344     <table class="bordered"><tr class="header"><th>Format</th><th>Description</th></tr>
345 <tr><td><code>%%</code></td>
346         <td>The percent sign</td></tr>
347 <tr class="odd"><td><code>%t</code></td>
348         <td>The time the request was received in Universal Coordinated Time
349         since the epoch (Jan. 1, 1970) measured in microseconds. The value
350         is preceded by <code>t=</code>.</td></tr>
351 <tr><td><code>%D</code></td>
352         <td>The time from when the request was received to the time the
353         headers are sent on the wire. This is a measure of the duration
354         of the request. The value is preceded by <code>D=</code>.
355         The value is measured in microseconds.</td></tr>
356 <tr class="odd"><td><code>%l</code></td>
357         <td>The current load averages of the actual server itself. It is
358         designed to expose the values obtained by <code>getloadavg()</code>
359         and this represents the current load average, the 5 minute average, and
360         the 15 minute average. The value is preceded by <code>l=</code> with each
361         average separated by <code>/</code>.<br />
362         Available in 2.4.4 and later.
363         </td></tr>
364 <tr><td><code>%i</code></td>
365         <td>The current idle percentage of httpd (0 to 100) based on available
366         processes and threads. The value is preceded by <code>i=</code>.<br />
367         Available in 2.4.4 and later.
368         </td></tr>
369 <tr class="odd"><td><code>%b</code></td>
370         <td>The current busy percentage of httpd (0 to 100) based on available
371         processes and threads. The value is preceded by <code>b=</code>.<br />
372         Available in 2.4.4 and later.
373         </td></tr>
374 <tr><td><code>%{VARNAME}e</code></td>
375         <td>The contents of the <a href="../env.html">environment
376         variable</a> <code>VARNAME</code>.</td></tr>
377 <tr class="odd"><td><code>%{VARNAME}s</code></td>
378         <td>The contents of the <a href="mod_ssl.html#envvars">SSL environment
379         variable</a> <code>VARNAME</code>, if <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is enabled.</td></tr>
380 </table>
381
382     <div class="note"><h3>Note</h3>
383       <p>The <code>%s</code> format specifier is only available in
384       Apache 2.1 and later; it can be used instead of <code>%e</code>
385       to avoid the overhead of enabling <code>SSLOptions
386       +StdEnvVars</code>.  If <code>SSLOptions +StdEnvVars</code> must
387       be enabled anyway for some other reason, <code>%e</code> will be
388       more efficient than <code>%s</code>.</p>
389     </div>
390
391     <p>For <code>edit</code> there is both a <var>value</var> argument
392     which is a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>,
393     and an additional <var>replacement</var> string. As of version 2.4.7
394     the replacement string may also contain format specifiers.</p>
395
396     <p>The <code class="directive">Header</code> directive may be followed by
397     an additional argument, which may be any of:</p>
398     <dl>
399     <dt><code>early</code></dt>
400     <dd>Specifies <a href="#early">early processing</a>.</dd>
401     <dt><code>env=[!]<var>varname</var></code></dt>
402     <dd>The directive is applied if and only if the <a href="../env.html">environment variable</a> <code>varname</code> exists.
403         A <code>!</code> in front of <code>varname</code> reverses the test,
404         so the directive applies only if <code>varname</code> is unset.</dd>
405     <dt><code>expr=<var>expression</var></code></dt>
406     <dd>The directive is applied if and only if <var>expression</var>
407         evaluates to true. Details of expression syntax and evaluation are
408         documented in the <a href="../expr.html">ap_expr</a> documentation.</dd>
409     </dl>
410
411     <p>Except in <a href="#early">early</a> mode, the
412     <code class="directive">Header</code> directives are processed just
413     before the response is sent to the network. This means that it is
414     possible to set and/or override most headers, except for some headers
415     added by the HTTP header filter.  Prior to 2.2.12, it was not possible 
416     to change the Content-Type header with this directive.</p>
417
418
419 </div>
420 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
421 <div class="directive-section"><h2><a name="RequestHeader" id="RequestHeader">RequestHeader</a> <a name="requestheader" id="requestheader">Directive</a></h2>
422 <table class="directive">
423 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure HTTP request headers</td></tr>
424 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RequestHeader add|append|edit|edit*|merge|set|setifempty|unset
425 <var>header</var> [[expr=]<var>value</var> [<var>replacement</var>]
426 [early|env=[!]<var>varname</var>|expr=<var>expression</var>]]
427 </code></td></tr>
428 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
429 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
430 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
431 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr>
432 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>SetIfEmpty available in 2.4.7 and later, expr=value 
433 available in 2.4.10 and later</td></tr>
434 </table>
435     <p>This directive can replace, merge, change or remove HTTP request
436     headers. The header is modified just before the content handler
437     is run, allowing incoming headers to be modified. The action it
438     performs is determined by the first argument. This can be one
439     of the following values:</p>
440
441     <dl>
442
443     <dt><code>add</code></dt>
444     <dd>The request header is added to the existing set of headers,
445     even if this header already exists. This can result in two
446     (or more) headers having the same name. This can lead to
447     unforeseen consequences, and in general <code>set</code>,
448     <code>append</code> or <code>merge</code> should be used instead.</dd>
449
450     <dt><code>append</code></dt>
451     <dd>The request header is appended to any existing header of the
452     same name. When a new value is merged onto an existing header
453     it is separated from the existing header with a comma. This
454     is the HTTP standard way of giving a header multiple
455     values.</dd>
456
457     <dt><code>edit</code></dt>
458     <dt><code>edit*</code></dt>
459     <dd>If this request header exists, its value is transformed according
460     to a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>
461     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>
462     is a replacement string, which may contain backreferences or format specifiers.
463     The <code>edit</code> form will match and replace exactly once
464     in a header value, whereas the <code>edit*</code> form will replace
465     <em>every</em> instance of the search pattern if it appears more
466     than once.</dd>
467
468     <dt><code>merge</code></dt>
469     <dd>The request header is appended to any existing header of
470     the same name, unless the value to be appended already appears in the
471     existing header's comma-delimited list of values.  When a new value is
472     merged onto an existing header it is separated from the existing header
473     with a comma.  This is the HTTP standard way of giving a header multiple
474     values.  Values are compared in a case sensitive manner, and after
475     all format specifiers have been processed.  Values in double quotes
476     are considered different from otherwise identical unquoted values.</dd>
477
478     <dt><code>set</code></dt>
479     <dd>The request header is set, replacing any previous header
480     with this name</dd>
481
482     <dt><code>setifempty</code></dt>
483     <dd>The request header is set, but only if there is no previous header
484     with this name.<br />
485     Available in 2.4.7 and later.</dd>
486
487     <dt><code>unset</code></dt>
488     <dd>The request header of this name is removed, if it exists. If
489     there are multiple headers of the same name, all will be removed.
490     <var>value</var> must be omitted.</dd>
491     </dl>
492
493     <p>This argument is followed by a header name, which can
494     include the final colon, but it is not required. Case is
495     ignored. For <code>set</code>, <code>append</code>, <code>merge</code> and
496     <code>add</code> a <var>value</var> is given as the third argument. If a
497     <var>value</var> contains spaces, it should be surrounded by double
498     quotes. For <code>unset</code>, no <var>value</var> should be given.
499     <var>value</var> may be a character string, a string containing format
500     specifiers or a combination of both. The supported format specifiers
501     are the same as for the <code class="directive"><a href="#header">Header</a></code>,
502     please have a look there for details.  For <code>edit</code> both
503     a <var>value</var> and a <var>replacement</var> are required, and are
504     a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a> and a
505     replacement string respectively.</p>
506
507     <p>The <code class="directive">RequestHeader</code> directive may be followed by
508     an additional argument, which may be any of:</p>
509     <dl>
510     <dt><code>early</code></dt>
511     <dd>Specifies <a href="#early">early processing</a>.</dd>
512     <dt><code>env=[!]<var>varname</var></code></dt>
513     <dd>The directive is applied if and only if the <a href="../env.html">environment variable</a> <code>varname</code> exists.
514         A <code>!</code> in front of <code>varname</code> reverses the test,
515         so the directive applies only if <code>varname</code> is unset.</dd>
516     <dt><code>expr=<var>expression</var></code></dt>
517     <dd>The directive is applied if and only if <var>expression</var>
518         evaluates to true. Details of expression syntax and evaluation are
519         documented in the <a href="../expr.html">ap_expr</a> documentation.</dd>
520     </dl>
521
522     <p>Except in <a href="#early">early</a> mode, the
523     <code class="directive">RequestHeader</code> directive is processed
524     just before the request is run by its handler in the fixup phase.
525     This should allow headers generated by the browser, or by Apache
526     input filters to be overridden or modified.</p>
527
528 </div>
529 </div>
530 <div class="bottomlang">
531 <p><span>Available Languages: </span><a href="../en/mod/mod_headers.html" title="English">&nbsp;en&nbsp;</a> |
532 <a href="../fr/mod/mod_headers.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
533 <a href="../ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
534 <a href="../ko/mod/mod_headers.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
535 </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>
536 <script type="text/javascript"><!--//--><![CDATA[//><!--
537 var comments_shortname = 'httpd';
538 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_headers.html';
539 (function(w, d) {
540     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
541         d.write('<div id="comments_thread"><\/div>');
542         var s = d.createElement('script');
543         s.type = 'text/javascript';
544         s.async = true;
545         s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
546         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
547     }
548     else {
549         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
550     }
551 })(window, document);
552 //--><!]]></script></div><div id="footer">
553 <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>
554 <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[//><!--
555 if (typeof(prettyPrint) !== 'undefined') {
556     prettyPrint();
557 }
558 //--><!]]></script>
559 </body></html>