From: Eric Covener Date: Fri, 5 Nov 2010 17:20:31 +0000 (+0000) Subject: Change the default of the Header directive to apply to responses of all types X-Git-Tag: 2.3.9~116 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c145eb760da47352df4decc15376d13493491acb;p=apache Change the default of the Header directive to apply to responses of all types instead of just 2xx successful responses. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1031670 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/docs/manual/mod/mod_headers.xml b/docs/manual/mod/mod_headers.xml index e559a3c0d7..8371fc2293 100644 --- a/docs/manual/mod/mod_headers.xml +++ b/docs/manual/mod/mod_headers.xml @@ -300,6 +300,7 @@ headers server configvirtual host directory.htaccess FileInfo +Default condition changes in 2.3.9 from "onsuccess" to "always"

This directive can replace, merge or remove HTTP response @@ -307,18 +308,16 @@ headers and output filters are run, allowing outgoing headers to be modified.

-

By default, this directive only affects successful responses (responses - in the 2xx range). The optional condition - can be either onsuccess (default) or always (all - status codes, including successful responses). A value of always - may be needed to influence headers set by some internal modules even for - successful responses, and is always needed to affect non-2xx - responses such as redirects or client errors.

- - CGI -

To manipulate headers set by CGI scripts, it is necessary to specify - always for the first parameter.

-
+

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 2xx + responses.

+ +

An effective value of always may be needed to influence + headers set by some internal modules (such as mod_cgi) + even for successful responses, and is always needed to affect + non-2xx responses such as redirects or client + errors.

The action it performs is determined by the first argument (second argument if a condition is specified). diff --git a/modules/metadata/mod_headers.c b/modules/metadata/mod_headers.c index 2e0c2813f0..b02ed715af 100644 --- a/modules/metadata/mod_headers.c +++ b/modules/metadata/mod_headers.c @@ -104,7 +104,7 @@ typedef enum { */ 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); @@ -521,12 +521,12 @@ static const char *header_cmd(cmd_parms *cmd, void *indirconf, 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); } } @@ -860,7 +860,7 @@ static apr_status_t ap_headers_early(request_rec *r) 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,