<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>FileInfo</override>
+<compatibility>Default condition changes in 2.3.9 from "onsuccess" to "always"</compatibility>
<usage>
<p>This directive can replace, merge or remove HTTP response
and output filters are run, allowing outgoing headers to be
modified.</p>
- <p>By default, this directive only affects successful responses (responses
- in the <code>2<var>xx</var></code> range). The optional <var>condition</var>
- can be either <code>onsuccess</code> (default) or <code>always</code> (all
- status codes, including successful responses). A value of <code>always</code>
- may be needed to influence headers set by some internal modules even for
- successful responses, and is always needed to affect non-<code>2<var>xx</var></code>
- responses such as redirects or client errors.</p>
-
- <note><title>CGI</title>
- <p>To manipulate headers set by CGI scripts, it is necessary to specify
- <code>always</code> for the first parameter.</p>
- </note>
+ <p> In 2.3.9 and later, the default condition is "always", meaning this directive
+ acts without regard for the response status code. In 2.3.8 and earlier,
+ "onsuccess" is the default, meaning headers are only modified for <code>2<var>xx</var>
+ </code> responses.</p>
+
+ <p>An effective value of <code>always</code> may be needed to influence
+ headers set by some internal modules (such as <module>mod_cgi</module>)
+ even for successful responses, and is always needed to affect
+ non-<code>2<var>xx</var></code> responses such as redirects or client
+ errors.</p>
<p>The action it performs is determined by the first
argument (second argument if a <var>condition</var> is specified).
*/
static char hdr_in = '0'; /* RequestHeader */
static char hdr_out_onsuccess = '1'; /* Header onsuccess */
-static char hdr_out_always = '2'; /* Header always */
+static char hdr_out_always = '2'; /* Header always (default) */
/* Callback function type. */
typedef const char *format_tag_fn(request_rec *r, char *a);
const char *subs;
action = ap_getword_conf(cmd->temp_pool, &args);
- if (cmd->info == &hdr_out_onsuccess) {
- if (!strcasecmp(action, "always")) {
- cmd->info = &hdr_out_always;
+ if (cmd->info == &hdr_out_always) {
+ if (!strcasecmp(action, "onsuccess")) {
+ cmd->info = &hdr_out_onsuccess;
action = ap_getword_conf(cmd->temp_pool, &args);
}
- else if (!strcasecmp(action, "onsuccess")) {
+ else if (!strcasecmp(action, "always")) {
action = ap_getword_conf(cmd->temp_pool, &args);
}
}
static const command_rec headers_cmds[] =
{
- AP_INIT_RAW_ARGS("Header", header_cmd, &hdr_out_onsuccess, OR_FILEINFO,
+ AP_INIT_RAW_ARGS("Header", header_cmd, &hdr_out_always, OR_FILEINFO,
"an optional condition, an action, header and value "
"followed by optional env clause"),
AP_INIT_RAW_ARGS("RequestHeader", header_cmd, &hdr_in, OR_FILEINFO,