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 <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7 This file is generated from xml source: DO NOT EDIT
8 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
10 <title>mod_headers - Apache HTTP Server Version 2.5</title>
11 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
12 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
13 <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" />
14 <script src="../style/scripts/prettify.min.js" type="text/javascript">
17 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
19 <div id="page-header">
20 <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>
21 <p class="apache">Apache HTTP Server Version 2.5</p>
22 <img alt="" src="../images/feather.png" /></div>
23 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
25 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.5</a> > <a href="./">Modules</a></div>
26 <div id="page-content">
27 <div id="preamble"><h1>Apache Module mod_headers</h1>
29 <p><span>Available Languages: </span><a href="../en/mod/mod_headers.html" title="English"> en </a> |
30 <a href="../fr/mod/mod_headers.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
31 <a href="../ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
32 <a href="../ko/mod/mod_headers.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
34 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Customization of HTTP request and response
36 <tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
37 <tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>headers_module</td></tr>
38 <tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_headers.c</td></tr></table>
41 <p>This module provides directives to control and modify HTTP
42 request and response headers. Headers can be merged, replaced
45 <div id="quickview"><h3>Topics</h3>
47 <li><img alt="" src="../images/down.gif" /> <a href="#order">Order of Processing</a></li>
48 <li><img alt="" src="../images/down.gif" /> <a href="#early">Early and Late Processing</a></li>
49 <li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
50 </ul><h3 class="directives">Directives</h3>
52 <li><img alt="" src="../images/down.gif" /> <a href="#header">Header</a></li>
53 <li><img alt="" src="../images/down.gif" /> <a href="#requestheader">RequestHeader</a></li>
55 <h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</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">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&component=mod_headers">Report a bug</a></li></ul><h3>See also</h3>
57 <li><a href="#comments_section">Comments</a></li></ul></div>
58 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
60 <h2><a name="order" id="order">Order of Processing</a></h2>
62 <p>The directives provided by <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> can
63 occur almost anywhere within the server configuration, and can be
64 limited in scope by enclosing them in <a href="../sections.html">configuration sections</a>.</p>
66 <p>Order of processing is important and is affected both by the
67 order in the configuration file and by placement in <a href="../sections.html#mergin">configuration sections</a>. These
68 two directives have a different effect if reversed:</p>
70 <pre class="prettyprint lang-config">RequestHeader append MirrorID "mirror 12"
71 RequestHeader unset MirrorID</pre>
74 <p>This way round, the <code>MirrorID</code> header is not set. If
75 reversed, the MirrorID header is set to "mirror 12".</p>
76 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
78 <h2><a name="early" id="early">Early and Late Processing</a></h2>
79 <p><code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> can be applied either early or late
80 in the request. The normal mode is late, when <em>Request</em> Headers are
81 set immediately before running the content generator and <em>Response</em>
82 Headers just as the response is sent down the wire. Always use
83 Late mode in an operational server.</p>
85 <p>Early mode is designed as a test/debugging aid for developers.
86 Directives defined using the <code>early</code> keyword are set
87 right at the beginning of processing the request. This means
88 they can be used to simulate different requests and set up test
89 cases, but it also means that headers may be changed at any time
90 by other modules before generating a Response.</p>
92 <p>Because early directives are processed before the request path's
93 configuration is traversed, early headers can only be set in a
94 main server or virtual host context. Early directives cannot depend
95 on a request path, so they will fail in contexts such as
96 <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> or
97 <code class="directive"><a href="../mod/core.html#location"><Location></a></code>.</p>
98 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
100 <h2><a name="examples" id="examples">Examples</a></h2>
104 Copy all request headers that begin with "TS" to the
107 <pre class="prettyprint lang-config">Header echo ^TS</pre>
112 Add a header, <code>MyHeader</code>, to the response including a
113 timestamp for when the request was received and how long it
114 took to begin serving the request. This header can be used by
115 the client to intuit load on the server or in isolating
116 bottlenecks between the client and the server.
118 <pre class="prettyprint lang-config">Header set MyHeader "%D %t"</pre>
121 <p>results in this header being added to the response:</p>
123 <div class="example"><p><code>
124 MyHeader: D=3775428 t=991424704447256
131 <pre class="prettyprint lang-config">Header set MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."</pre>
134 <p>results in this header being added to the response:</p>
136 <div class="example"><p><code>
137 MyHeader: Hello Joe. It took D=3775428 microseconds for Apache
138 to serve this request.
143 Conditionally send <code>MyHeader</code> on the response if and
144 only if header <code>MyRequestHeader</code> is present on the request.
145 This is useful for constructing headers in response to some client
146 stimulus. Note that this example requires the services of the
147 <code class="module"><a href="../mod/mod_setenvif.html">mod_setenvif</a></code> module.
149 <pre class="prettyprint lang-config">SetEnvIf MyRequestHeader myvalue HAVE_MyRequestHeader
150 Header set MyHeader "%D %t mytext" env=HAVE_MyRequestHeader</pre>
153 <p>If the header <code>MyRequestHeader: myvalue</code> is present on
154 the HTTP request, the response will contain the following header:</p>
156 <div class="example"><p><code>
157 MyHeader: D=3775428 t=991424704447256 mytext
162 Enable DAV to work with Apache running HTTP through SSL hardware
163 (<a href="http://svn.haxx.se/users/archive-2006-03/0549.shtml">problem
164 description</a>) by replacing <var>https:</var> with
165 <var>http:</var> in the <var>Destination</var> header:
167 <pre class="prettyprint lang-config">RequestHeader edit Destination ^https: http: early</pre>
172 Set the same header value under multiple nonexclusive conditions,
173 but do not duplicate the value in the final header.
174 If all of the following conditions applied to a request (i.e.,
175 if the <code>CGI</code>, <code>NO_CACHE</code> and
176 <code>NO_STORE</code> environment variables all existed for the
179 <pre class="prettyprint lang-config">Header merge Cache-Control no-cache env=CGI
180 Header merge Cache-Control no-cache env=NO_CACHE
181 Header merge Cache-Control no-store env=NO_STORE</pre>
184 <p>then the response would contain the following header:</p>
186 <div class="example"><p><code>
187 Cache-Control: no-cache, no-store
190 <p>If <code>append</code> was used instead of <code>merge</code>,
191 then the response would contain the following header:</p>
193 <div class="example"><p><code>
194 Cache-Control: no-cache, no-cache, no-store
198 Set a test cookie if and only if the client didn't send us a cookie
199 <pre class="prettyprint lang-config">Header set Set-Cookie testcookie "expr=-z %{req:Cookie}"</pre>
203 Append a Caching header for responses with a HTTP status code of 200
204 <pre class="prettyprint lang-config">Header append Cache-Control s-maxage=600 "expr=%{REQUEST_STATUS} == 200"</pre>
210 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
211 <div class="directive-section"><h2><a name="Header" id="Header">Header</a> <a name="header" id="header">Directive</a></h2>
212 <table class="directive">
213 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure HTTP response headers</td></tr>
214 <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
215 <var>header</var> [[expr=]<var>value</var> [<var>replacement</var>]
216 [early|env=[!]<var>varname</var>|expr=<var>expression</var>]]
218 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
219 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
220 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
221 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr>
222 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>SetIfEmpty available in 2.4.7 and later, expr=value
223 available in 2.4.10 and later</td></tr>
225 <p>This directive can replace, merge or remove HTTP response
226 headers. The header is modified just after the content handler
227 and output filters are run, allowing outgoing headers to be
230 <p> The optional <var>condition</var> argument determines which internal
231 table of responses headers this directive will operate against. Despite the
232 name, the default value of <code>onsuccess</code> does <em>not</em> limit
233 an <var>action</var> to responses with a 2xx status code. Headers set under
234 this condition are still used when, for example, a request is <em>successfully</em>
235 proxied or generated by CGI, even when they have generated a failing status code.</p>
237 <p>When your action is a function of an existing header, you may need to specify
238 a condition of <code>always</code>, depending on which internal table the
239 original header was set in. The table that corresponds to <code>always</code> is
240 used for locally generated error responses as well as successful responses.
241 Note also that repeating this directive with both conditions makes sense in
242 some scenarios because <code>always</code> is not a superset of
243 <code>onsuccess</code> with respect to existing headers:</p>
246 <li> You're adding a header to a locally generated non-success (non-2xx) response, such
247 as a redirect, in which case only the table corresponding to
248 <code>always</code> is used in the ultimate response.</li>
249 <li> You're modifying or removing a header generated by a CGI script,
250 in which case the CGI scripts are in the table corresponding to
251 <code>always</code> and not in the default table.</li>
252 <li> You're modifying or removing a header generated by some piece of
253 the server but that header is not being found by the default
254 <code>onsuccess</code> condition.</li>
257 <p>Separately from the <var>condition</var> parameter described above, you
258 can limit an action based on HTTP status codes for e.g. proxied or CGI
259 requests. See the example that uses %{REQUEST_STATUS} in the section above.</p>
261 <p>The action it performs is determined by the first
262 argument (second argument if a <var>condition</var> is specified).
263 This can be one of the following values:</p>
266 <dt><code>add</code></dt>
267 <dd>The response header is added to the existing set of headers,
268 even if this header already exists. This can result in two
269 (or more) headers having the same name. This can lead to
270 unforeseen consequences, and in general <code>set</code>,
271 <code>append</code> or <code>merge</code> should be used instead.</dd>
273 <dt><code>append</code></dt>
274 <dd>The response header is appended to any existing header of
275 the same name. When a new value is merged onto an existing
276 header it is separated from the existing header with a comma.
277 This is the HTTP standard way of giving a header multiple values.</dd>
279 <dt><code>echo</code></dt>
280 <dd>Request headers with this name are echoed back in the
281 response headers. <var>header</var> may be a
282 <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>.
283 <var>value</var> must be omitted.</dd>
285 <dt><code>edit</code></dt>
286 <dt><code>edit*</code></dt>
287 <dd>If this response header exists, its value is transformed according
288 to a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>
289 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>
290 is a replacement string, which may contain backreferences or format specifiers.
291 The <code>edit</code> form will match and replace exactly once
292 in a header value, whereas the <code>edit*</code> form will replace
293 <em>every</em> instance of the search pattern if it appears more
296 <dt><code>merge</code></dt>
297 <dd>The response header is appended to any existing header of
298 the same name, unless the value to be appended already appears in the
299 header's comma-delimited list of values. When a new value is merged onto
300 an existing header it is separated from the existing header with a comma.
301 This is the HTTP standard way of giving a header multiple values.
302 Values are compared in a case sensitive manner, and after
303 all format specifiers have been processed. Values in double quotes
304 are considered different from otherwise identical unquoted values.</dd>
306 <dt><code>set</code></dt>
307 <dd>The response header is set, replacing any previous header
308 with this name. The <var>value</var> may be a format string.</dd>
310 <dt><code>setifempty</code></dt>
311 <dd>The request header is set, but only if there is no previous header
314 The Content-Type header is a special use case since there might be
315 the chance that its value have been determined but the header is not part
316 of the response when <code>setifempty</code> is evaluated.
317 It is safer to use <code>set</code> for this use case like in the
319 <pre class="prettyprint lang-config">Header set Content-Type "text/plain" "expr=-z %{CONTENT_TYPE}"</pre>
323 <dt><code>unset</code></dt>
324 <dd>The response header of this name is removed, if it exists.
325 If there are multiple headers of the same name, all will be
326 removed. <var>value</var> must be omitted.</dd>
328 <dt><code>note</code></dt>
329 <dd>The value of the named response <var>header</var> is copied into an
330 internal note whose name is given by <var>value</var>. This is useful
331 if a header sent by a CGI or proxied resource is configured to be unset
332 but should also be logged.<br />
333 Available in 2.4.7 and later.</dd>
337 <p>This argument is followed by a <var>header</var> name, which
338 can include the final colon, but it is not required. Case is
339 ignored for <code>set</code>, <code>append</code>, <code>merge</code>,
340 <code>add</code>, <code>unset</code> and <code>edit</code>.
341 The <var>header</var> name for <code>echo</code>
342 is case sensitive and may be a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular
345 <p>For <code>set</code>, <code>append</code>, <code>merge</code> and
346 <code>add</code> a <var>value</var> is specified as the next argument.
348 contains spaces, it should be surrounded by double quotes.
349 <var>value</var> may be a character string, a string containing
350 <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> specific format specifiers (and character
351 literals), or an <a href="../expr.html">ap_expr</a> expression prefixed
352 with <em>expr=</em></p>
354 <p> The following format specifiers are supported in <var>value</var>:</p>
356 <table class="bordered"><tr class="header"><th>Format</th><th>Description</th></tr>
357 <tr><td><code>%%</code></td>
358 <td>The percent sign</td></tr>
359 <tr class="odd"><td><code>%t</code></td>
360 <td>The time the request was received in Universal Coordinated Time
361 since the epoch (Jan. 1, 1970) measured in microseconds. The value
362 is preceded by <code>t=</code>.</td></tr>
363 <tr><td><code>%D</code></td>
364 <td>The time from when the request was received to the time the
365 headers are sent on the wire. This is a measure of the duration
366 of the request. The value is preceded by <code>D=</code>.
367 The value is measured in microseconds.</td></tr>
368 <tr class="odd"><td><code>%l</code></td>
369 <td>The current load averages of the actual server itself. It is
370 designed to expose the values obtained by <code>getloadavg()</code>
371 and this represents the current load average, the 5 minute average, and
372 the 15 minute average. The value is preceded by <code>l=</code> with each
373 average separated by <code>/</code>.<br />
374 Available in 2.4.4 and later.
376 <tr><td><code>%i</code></td>
377 <td>The current idle percentage of httpd (0 to 100) based on available
378 processes and threads. The value is preceded by <code>i=</code>.<br />
379 Available in 2.4.4 and later.
381 <tr class="odd"><td><code>%b</code></td>
382 <td>The current busy percentage of httpd (0 to 100) based on available
383 processes and threads. The value is preceded by <code>b=</code>.<br />
384 Available in 2.4.4 and later.
386 <tr><td><code>%{VARNAME}e</code></td>
387 <td>The contents of the <a href="../env.html">environment
388 variable</a> <code>VARNAME</code>.</td></tr>
389 <tr class="odd"><td><code>%{VARNAME}s</code></td>
390 <td>The contents of the <a href="mod_ssl.html#envvars">SSL environment
391 variable</a> <code>VARNAME</code>, if <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> is enabled.</td></tr>
394 <div class="note"><h3>Note</h3>
395 <p>The <code>%s</code> format specifier is only available in
396 Apache 2.1 and later; it can be used instead of <code>%e</code>
397 to avoid the overhead of enabling <code>SSLOptions
398 +StdEnvVars</code>. If <code>SSLOptions +StdEnvVars</code> must
399 be enabled anyway for some other reason, <code>%e</code> will be
400 more efficient than <code>%s</code>.</p>
403 <div class="note"><h3>Note on expression values</h3>
404 <p> When the value parameter uses the <a href="../expr.html">ap_expr</a>
405 parser, some expression syntax will differ from examples that evaluate
406 <em>boolean</em> expressions such as <If>:</p>
408 <li>The starting point of the grammar is 'string' rather than 'expr'.</li>
409 <li>Function calls use the %{funcname:arg} syntax rather than
411 <li>Multi-argument functions are not currently accessible from this
413 <li>Quote the entire parameter, such as
414 <pre class="prettyprint lang-config">Header set foo-checksum "expr=%{md5:foo}"</pre>
421 <p>For <code>edit</code> there is both a <var>value</var> argument
422 which is a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>,
423 and an additional <var>replacement</var> string. As of version 2.4.7
424 the replacement string may also contain format specifiers.</p>
426 <p>The <code class="directive">Header</code> directive may be followed by
427 an additional argument, which may be any of:</p>
429 <dt><code>early</code></dt>
430 <dd>Specifies <a href="#early">early processing</a>.</dd>
431 <dt><code>env=[!]<var>varname</var></code></dt>
432 <dd>The directive is applied if and only if the <a href="../env.html">environment variable</a> <code>varname</code> exists.
433 A <code>!</code> in front of <code>varname</code> reverses the test,
434 so the directive applies only if <code>varname</code> is unset.</dd>
435 <dt><code>expr=<var>expression</var></code></dt>
436 <dd>The directive is applied if and only if <var>expression</var>
437 evaluates to true. Details of expression syntax and evaluation are
438 documented in the <a href="../expr.html">ap_expr</a> documentation.
439 <pre class="prettyprint lang-config"># This delays the evaluation of the condition clause compared to <If>
440 Header always set CustomHeader my-value "expr=%{REQUEST_URI} =~ m#^/special_path.php$#"</pre>
445 <p>Except in <a href="#early">early</a> mode, the
446 <code class="directive">Header</code> directives are processed just
447 before the response is sent to the network. This means that it is
448 possible to set and/or override most headers, except for some headers
449 added by the HTTP header filter. Prior to 2.2.12, it was not possible
450 to change the Content-Type header with this directive.</p>
454 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
455 <div class="directive-section"><h2><a name="RequestHeader" id="RequestHeader">RequestHeader</a> <a name="requestheader" id="requestheader">Directive</a></h2>
456 <table class="directive">
457 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure HTTP request headers</td></tr>
458 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RequestHeader add|append|edit|edit*|merge|set|setifempty|unset
459 <var>header</var> [[expr=]<var>value</var> [<var>replacement</var>]
460 [early|env=[!]<var>varname</var>|expr=<var>expression</var>]]
462 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
463 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
464 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
465 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr>
466 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>SetIfEmpty available in 2.4.7 and later, expr=value
467 available in 2.4.10 and later</td></tr>
469 <p>This directive can replace, merge, change or remove HTTP request
470 headers. The header is modified just before the content handler
471 is run, allowing incoming headers to be modified. The action it
472 performs is determined by the first argument. This can be one
473 of the following values:</p>
477 <dt><code>add</code></dt>
478 <dd>The request header is added to the existing set of headers,
479 even if this header already exists. This can result in two
480 (or more) headers having the same name. This can lead to
481 unforeseen consequences, and in general <code>set</code>,
482 <code>append</code> or <code>merge</code> should be used instead.</dd>
484 <dt><code>append</code></dt>
485 <dd>The request header is appended to any existing header of the
486 same name. When a new value is merged onto an existing header
487 it is separated from the existing header with a comma. This
488 is the HTTP standard way of giving a header multiple
491 <dt><code>edit</code></dt>
492 <dt><code>edit*</code></dt>
493 <dd>If this request header exists, its value is transformed according
494 to a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>
495 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>
496 is a replacement string, which may contain backreferences or format specifiers.
497 The <code>edit</code> form will match and replace exactly once
498 in a header value, whereas the <code>edit*</code> form will replace
499 <em>every</em> instance of the search pattern if it appears more
502 <dt><code>merge</code></dt>
503 <dd>The request header is appended to any existing header of
504 the same name, unless the value to be appended already appears in the
505 existing header's comma-delimited list of values. When a new value is
506 merged onto an existing header it is separated from the existing header
507 with a comma. This is the HTTP standard way of giving a header multiple
508 values. Values are compared in a case sensitive manner, and after
509 all format specifiers have been processed. Values in double quotes
510 are considered different from otherwise identical unquoted values.</dd>
512 <dt><code>set</code></dt>
513 <dd>The request header is set, replacing any previous header
516 <dt><code>setifempty</code></dt>
517 <dd>The request header is set, but only if there is no previous header
518 with this name.<br />
519 Available in 2.4.7 and later.</dd>
521 <dt><code>unset</code></dt>
522 <dd>The request header of this name is removed, if it exists. If
523 there are multiple headers of the same name, all will be removed.
524 <var>value</var> must be omitted.</dd>
527 <p>This argument is followed by a header name, which can
528 include the final colon, but it is not required. Case is
529 ignored. For <code>set</code>, <code>append</code>, <code>merge</code> and
530 <code>add</code> a <var>value</var> is given as the third argument. If a
531 <var>value</var> contains spaces, it should be surrounded by double
532 quotes. For <code>unset</code>, no <var>value</var> should be given.
533 <var>value</var> may be a character string, a string containing format
534 specifiers or a combination of both. The supported format specifiers
535 are the same as for the <code class="directive"><a href="#header">Header</a></code>,
536 please have a look there for details. For <code>edit</code> both
537 a <var>value</var> and a <var>replacement</var> are required, and are
538 a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a> and a
539 replacement string respectively.</p>
541 <p>The <code class="directive">RequestHeader</code> directive may be followed by
542 an additional argument, which may be any of:</p>
544 <dt><code>early</code></dt>
545 <dd>Specifies <a href="#early">early processing</a>.</dd>
546 <dt><code>env=[!]<var>varname</var></code></dt>
547 <dd>The directive is applied if and only if the <a href="../env.html">environment variable</a> <code>varname</code> exists.
548 A <code>!</code> in front of <code>varname</code> reverses the test,
549 so the directive applies only if <code>varname</code> is unset.</dd>
550 <dt><code>expr=<var>expression</var></code></dt>
551 <dd>The directive is applied if and only if <var>expression</var>
552 evaluates to true. Details of expression syntax and evaluation are
553 documented in the <a href="../expr.html">ap_expr</a> documentation.</dd>
556 <p>Except in <a href="#early">early</a> mode, the
557 <code class="directive">RequestHeader</code> directive is processed
558 just before the request is run by its handler in the fixup phase.
559 This should allow headers generated by the browser, or by Apache
560 input filters to be overridden or modified.</p>
564 <div class="bottomlang">
565 <p><span>Available Languages: </span><a href="../en/mod/mod_headers.html" title="English"> en </a> |
566 <a href="../fr/mod/mod_headers.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
567 <a href="../ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
568 <a href="../ko/mod/mod_headers.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
569 </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&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>
570 <script type="text/javascript"><!--//--><![CDATA[//><!--
571 var comments_shortname = 'httpd';
572 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_headers.html';
574 if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
575 d.write('<div id="comments_thread"><\/div>');
576 var s = d.createElement('script');
577 s.type = 'text/javascript';
579 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
580 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
583 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
585 })(window, document);
586 //--><!]]></script></div><div id="footer">
587 <p class="apache">Copyright 2016 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>
588 <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[//><!--
589 if (typeof(prettyPrint) !== 'undefined') {