Change the default of the Header directive to apply to responses of all types
instead of just 2xx successful responses.
This turned out to be do more harm than good for anything other
than "set", since "always" doesn't ever see/operate on existing
r->headers_out headers -- just err_headers_out.
I think onsuccess needs to remain the default and this needs to move into a
doc revamp.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@
1053516 13f79535-47bb-0310-9956-
ffa450edef68
Changes with Apache 2.3.11
+ *) mod_headers: Restore the 2.3.8 and earlier default for the first
+ argument of the Header directive ("onsuccess"). [Eric Covener]
+
*) core: Disallow the mixing of relative and absolute Options PR 33708.
[Sönke Tesch <st kino-fahrplan.de>]
<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> 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>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>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 (default) */
+static char hdr_out_always = '2'; /* Header always */
/* 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_always) {
- if (!strcasecmp(action, "onsuccess")) {
- cmd->info = &hdr_out_onsuccess;
+ if (cmd->info == &hdr_out_onsuccess) {
+ if (!strcasecmp(action, "always")) {
+ cmd->info = &hdr_out_always;
action = ap_getword_conf(cmd->temp_pool, &args);
}
- else if (!strcasecmp(action, "always")) {
+ else if (!strcasecmp(action, "onsuccess")) {
action = ap_getword_conf(cmd->temp_pool, &args);
}
}
static const command_rec headers_cmds[] =
{
- AP_INIT_RAW_ARGS("Header", header_cmd, &hdr_out_always, OR_FILEINFO,
+ AP_INIT_RAW_ARGS("Header", header_cmd, &hdr_out_onsuccess, 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,