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/directives.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.4</p> 20<img alt="" src="/images/feather.gif" /></div> 21<div class="up"><a href="./"><img title="<-" alt="<-" src="/images/left.gif" /></a></div> 22<div id="path"> 23<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.4</a> > <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"> en </a> | 28<a href="/fr/mod/mod_headers.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </a> | 29<a href="/ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 30<a href="/ko/mod/mod_headers.html" hreflang="ko" rel="alternate" title="Korean"> ko </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 33headers</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" 67RequestHeader 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><Directory></code> or <code><Location></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 145Header 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 175Header merge Cache-Control no-cache env=NO_CACHE 176Header 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|setifempty|unset|note 204<var>header</var> [<var>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<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Default condition was temporarily changed to "always" in 2.3.9 and 2.3.10. SetIfEmpty available since 2.4.7.</td></tr> 212</table> 213 <p>This directive can replace, merge or remove HTTP response 214 headers. The header is modified just after the content handler 215 and output filters are run, allowing outgoing headers to be 216 modified.</p> 217 218 <p> The optional <var>condition</var> argument determines which internal 219 table of responses headers this directive will operate against. Other 220 components of the server may have stored their response headers in either 221 the table that corresponds to <code>onsuccess</code> or the table that 222 corresponds to <code>always</code>. "Always" in this context refers to 223 whether headers you add will be sent during both a successful and unsucessful 224 response, but if your action is a function of an existing header, you 225 will have to read on for further complications.</p> 226 227 <p> The default value of <code>onsuccess</code> may need to be changed to 228 <code>always</code> under the circumstances similar to those listed below. 229 Note also that repeating this directive with both conditions makes sense in 230 some scenarios because <code>always</code> is not a superset of 231 <code>onsuccess</code> with respect to existing headers:</p> 232 233 <ul> 234 <li> You're adding a header to a non-success (non-2xx) response, such 235 as a redirect, in which case only the table corresponding to 236 <code>always</code> is used in the ultimate response.</li> 237 <li> You're modifying or removing a header generated by a CGI script, 238 in which case the CGI scripts are in the table corresponding to 239 <code>always</code> and not in the default table.</li> 240 <li> You're modifying or removing a header generated by some piece of 241 the server but that header is not being found by the default 242 <code>onsuccess</code> condition.</li> 243 </ul> 244 245 <p>The action it performs is determined by the first 246 argument (second argument if a <var>condition</var> is specified). 247 This can be one of the following values:</p> 248 249 <dl> 250 <dt><code>add</code></dt> 251 <dd>The response header is added to the existing set of headers, 252 even if this header already exists. This can result in two 253 (or more) headers having the same name. This can lead to 254 unforeseen consequences, and in general <code>set</code>, 255 <code>append</code> or <code>merge</code> should be used instead.</dd> 256 257 <dt><code>append</code></dt> 258 <dd>The response header is appended to any existing header of 259 the same name. When a new value is merged onto an existing 260 header it is separated from the existing header with a comma. 261 This is the HTTP standard way of giving a header multiple values.</dd> 262 263 <dt><code>echo</code></dt> 264 <dd>Request headers with this name are echoed back in the 265 response headers. <var>header</var> may be a 266 <a class="glossarylink" href="/glossary.html#regex" title="see glossary">regular expression</a>. 267 <var>value</var> must be omitted.</dd> 268 269 <dt><code>edit</code></dt> 270 <dt><code>edit*</code></dt> 271 <dd>If this response header exists, its value is transformed according 272 to a <a class="glossarylink" href="/glossary.html#regex" title="see glossary">regular expression</a> 273 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> 274 is a replacement string, which may contain backreferences or format specifiers. 275 The <code>edit</code> form will match and replace exactly once 276 in a header value, whereas the <code>edit*</code> form will replace 277 <em>every</em> instance of the search pattern if it appears more 278 than once.</dd> 279 280 <dt><code>merge</code></dt> 281 <dd>The response header is appended to any existing header of 282 the same name, unless the value to be appended already appears in the 283 header's comma-delimited list of values. When a new value is merged onto 284 an existing header it is separated from the existing header with a comma. 285 This is the HTTP standard way of giving a header multiple values. 286 Values are compared in a case sensitive manner, and after 287 all format specifiers have been processed. Values in double quotes 288 are considered different from otherwise identical unquoted values.</dd> 289 290 <dt><code>set</code></dt> 291 <dd>The response header is set, replacing any previous header 292 with this name. The <var>value</var> may be a format string.</dd> 293 294 <dt><code>setifempty</code></dt> 295 <dd>The request header is set, but only if there is no previous header 296 with this name. Available in 2.4.7 and later.</dd> 297 298 <dt><code>unset</code></dt> 299 <dd>The response header of this name is removed, if it exists. 300 If there are multiple headers of the same name, all will be 301 removed. <var>value</var> must be omitted.</dd> 302 303 <dt><code>note</code></dt> 304 <dd>The value of the named response <var>header</var> is copied into an 305 internal note whose name is given by <var>value</var>. This is useful 306 if a header sent by a CGI or proxied resource is configured to be unset 307 but should also be logged.</dd> 308 309 </dl> 310 311 <p>This argument is followed by a <var>header</var> name, which 312 can include the final colon, but it is not required. Case is 313 ignored for <code>set</code>, <code>append</code>, <code>merge</code>, 314 <code>add</code>, <code>unset</code> and <code>edit</code>. 315 The <var>header</var> name for <code>echo</code> 316 is case sensitive and may be a <a class="glossarylink" href="/glossary.html#regex" title="see glossary">regular 317 expression</a>.</p> 318 319 <p>For <code>set</code>, <code>append</code>, <code>merge</code> and 320 <code>add</code> a <var>value</var> is specified as the next argument. 321 If <var>value</var> 322 contains spaces, it should be surrounded by double quotes. 323 <var>value</var> may be a character string, a string containing format 324 specifiers or a combination of both. The following format specifiers 325 are supported in <var>value</var>:</p> 326 327 <table class="bordered"><tr class="header"><th>Format</th><th>Description</th></tr> 328<tr><td><code>%%</code></td> 329 <td>The percent sign</td></tr> 330<tr class="odd"><td><code>%t</code></td> 331 <td>The time the request was received in Universal Coordinated Time 332 since the epoch (Jan. 1, 1970) measured in microseconds. The value 333 is preceded by <code>t=</code>.</td></tr> 334<tr><td><code>%D</code></td> 335 <td>The time from when the request was received to the time the 336 headers are sent on the wire. This is a measure of the duration 337 of the request. The value is preceded by <code>D=</code>. 338 The value is measured in microseconds.</td></tr> 339<tr class="odd"><td><code>%l</code></td> 340 <td>The current load averages of the actual server itself. It is 341 designed to expose the values obtained by <code>getloadavg()</code> 342 and this represents the current load average, the 5 minute average, and 343 the 15 minute average. The value is preceded by <code>l=</code> with each 344 average separated by <code>/</code>. 345 </td></tr> 346<tr><td><code>%i</code></td> 347 <td>The current idle percentage of httpd (0 to 100) based on available 348 processes and threads. The value is preceded by <code>i=</code>. 349 </td></tr> 350<tr class="odd"><td><code>%b</code></td> 351 <td>The current busy percentage of httpd (0 to 100) based on available 352 processes and threads. The value is preceded by <code>b=</code>. 353 </td></tr> 354<tr><td><code>%{VARNAME}e</code></td> 355 <td>The contents of the <a href="/env.html">environment 356 variable</a> <code>VARNAME</code>.</td></tr> 357<tr class="odd"><td><code>%{VARNAME}s</code></td> 358 <td>The contents of the <a href="mod_ssl.html#envvars">SSL environment 359 variable</a> <code>VARNAME</code>, if <code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code> is enabled.</td></tr> 360</table> 361 362 <div class="note"><h3>Note</h3> 363 <p>The <code>%s</code> format specifier is only available in 364 Apache 2.1 and later; it can be used instead of <code>%e</code> 365 to avoid the overhead of enabling <code>SSLOptions 366 +StdEnvVars</code>. If <code>SSLOptions +StdEnvVars</code> must 367 be enabled anyway for some other reason, <code>%e</code> will be 368 more efficient than <code>%s</code>.</p> 369 </div> 370 371 <p>For <code>edit</code> there is both a <var>value</var> argument 372 which is a <a class="glossarylink" href="/glossary.html#regex" title="see glossary">regular expression</a>, 373 and an additional <var>replacement</var> string. As of version 2.4.7 374 the replacement string may also contain format specifiers.</p> 375 376 <p>The <code class="directive">Header</code> directive may be followed by 377 an additional argument, which may be any of:</p> 378 <dl> 379 <dt><code>early</code></dt> 380 <dd>Specifies <a href="#early">early processing</a>.</dd> 381 <dt><code>env=[!]<var>varname</var></code></dt> 382 <dd>The directive is applied if and only if the <a href="/env.html">environment variable</a> <code>varname</code> exists. 383 A <code>!</code> in front of <code>varname</code> reverses the test, 384 so the directive applies only if <code>varname</code> is unset.</dd> 385 <dt><code>expr=<var>expression</var></code></dt> 386 <dd>The directive is applied if and only if <var>expression</var> 387 evaluates to true. Details of expression syntax and evaluation are 388 documented in the <a href="/expr.html">ap_expr</a> documentation.</dd> 389 </dl> 390 391 <p>Except in <a href="#early">early</a> mode, the 392 <code class="directive">Header</code> directives are processed just 393 before the response is sent to the network. These means that it is 394 possible to set and/or override most headers, except for those headers 395 added by the HTTP header filter, such as Content-Type.</p> 396 397</div> 398<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 399<div class="directive-section"><h2><a name="RequestHeader" id="RequestHeader">RequestHeader</a> <a name="requestheader" id="requestheader">Directive</a></h2> 400<table class="directive"> 401<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configure HTTP request headers</td></tr> 402<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RequestHeader add|append|edit|edit*|merge|set|setifempty|unset 403<var>header</var> [<var>value</var>] [<var>replacement</var>] 404[early|env=[!]<var>variable</var>]|expr=<var>expression</var>] 405</code></td></tr> 406<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr> 407<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr> 408<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> 409<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_headers</td></tr> 410<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>SetIfEmpty available in 2.4.7 and later</td></tr> 411</table> 412 <p>This directive can replace, merge, change or remove HTTP request 413 headers. The header is modified just before the content handler 414 is run, allowing incoming headers to be modified. The action it 415 performs is determined by the first argument. This can be one 416 of the following values:</p> 417 418 <dl> 419 420 <dt><code>add</code></dt> 421 <dd>The request header is added to the existing set of headers, 422 even if this header already exists. This can result in two 423 (or more) headers having the same name. This can lead to 424 unforeseen consequences, and in general <code>set</code>, 425 <code>append</code> or <code>merge</code> should be used instead.</dd> 426 427 <dt><code>append</code></dt> 428 <dd>The request header is appended to any existing header of the 429 same name. When a new value is merged onto an existing header 430 it is separated from the existing header with a comma. This 431 is the HTTP standard way of giving a header multiple 432 values.</dd> 433 434 <dt><code>edit</code></dt> 435 <dt><code>edit*</code></dt> 436 <dd>If this request header exists, its value is transformed according 437 to a <a class="glossarylink" href="/glossary.html#regex" title="see glossary">regular expression</a> 438 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> 439 is a replacement string, which may contain backreferences or format specifiers. 440 The <code>edit</code> form will match and replace exactly once 441 in a header value, whereas the <code>edit*</code> form will replace 442 <em>every</em> instance of the search pattern if it appears more 443 than once.</dd> 444 445 <dt><code>merge</code></dt> 446 <dd>The request header is appended to any existing header of 447 the same name, unless the value to be appended already appears in the 448 existing header's comma-delimited list of values. When a new value is 449 merged onto an existing header it is separated from the existing header 450 with a comma. This is the HTTP standard way of giving a header multiple 451 values. Values are compared in a case sensitive manner, and after 452 all format specifiers have been processed. Values in double quotes 453 are considered different from otherwise identical unquoted values.</dd> 454 455 <dt><code>set</code></dt> 456 <dd>The request header is set, replacing any previous header 457 with this name</dd> 458 459 <dt><code>setifempty</code></dt> 460 <dd>The request header is set, but only if there is no previous header 461 with this name. Available in 2.4.7 and later.</dd> 462 463 <dt><code>unset</code></dt> 464 <dd>The request header of this name is removed, if it exists. If 465 there are multiple headers of the same name, all will be removed. 466 <var>value</var> must be omitted.</dd> 467 </dl> 468 469 <p>This argument is followed by a header name, which can 470 include the final colon, but it is not required. Case is 471 ignored. For <code>set</code>, <code>append</code>, <code>merge</code> and 472 <code>add</code> a <var>value</var> is given as the third argument. If a 473 <var>value</var> contains spaces, it should be surrounded by double 474 quotes. For <code>unset</code>, no <var>value</var> should be given. 475 <var>value</var> may be a character string, a string containing format 476 specifiers or a combination of both. The supported format specifiers 477 are the same as for the <code class="directive"><a href="#header">Header</a></code>, 478 please have a look there for details. For <code>edit</code> both 479 a <var>value</var> and a <var>replacement</var> are required, and are 480 a <a class="glossarylink" href="/glossary.html#regex" title="see glossary">regular expression</a> and a 481 replacement string respectively.</p> 482 483 <p>The <code class="directive">RequestHeader</code> directive may be followed by 484 an additional argument, which may be any of:</p> 485 <dl> 486 <dt><code>early</code></dt> 487 <dd>Specifies <a href="#early">early processing</a>.</dd> 488 <dt><code>env=[!]<var>varname</var></code></dt> 489 <dd>The directive is applied if and only if the <a href="/env.html">environment variable</a> <code>varname</code> exists. 490 A <code>!</code> in front of <code>varname</code> reverses the test, 491 so the directive applies only if <code>varname</code> is unset.</dd> 492 <dt><code>expr=<var>expression</var></code></dt> 493 <dd>The directive is applied if and only if <var>expression</var> 494 evaluates to true. Details of expression syntax and evaluation are 495 documented in the <a href="/expr.html">ap_expr</a> documentation.</dd> 496 </dl> 497 498 <p>Except in <a href="#early">early</a> mode, the 499 <code class="directive">RequestHeader</code> directive is processed 500 just before the request is run by its handler in the fixup phase. 501 This should allow headers generated by the browser, or by Apache 502 input filters to be overridden or modified.</p> 503 504</div> 505</div> 506<div class="bottomlang"> 507<p><span>Available Languages: </span><a href="/en/mod/mod_headers.html" title="English"> en </a> | 508<a href="/fr/mod/mod_headers.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </a> | 509<a href="/ja/mod/mod_headers.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 510<a href="/ko/mod/mod_headers.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> 511</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> 512<script type="text/javascript"><!--//--><![CDATA[//><!-- 513var comments_shortname = 'httpd'; 514var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_headers.html'; 515(function(w, d) { 516 if (w.location.hostname.toLowerCase() == "httpd.apache.org") { 517 d.write('<div id="comments_thread"><\/div>'); 518 var s = d.createElement('script'); 519 s.type = 'text/javascript'; 520 s.async = true; 521 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; 522 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); 523 } 524 else { 525 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); 526 } 527})(window, document); 528//--><!]]></script></div><div id="footer"> 529<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> 530<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossary</a> | <a href="/sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- 531if (typeof(prettyPrint) !== 'undefined') { 532 prettyPrint(); 533} 534//--><!]]></script> 535</body></html>