From: Luca Toscano
The optional condition argument determines which internal
- table of responses headers this directive will operate against. Despite the
- name, the default value of onsuccess
does not limit
- an action to responses with a 2xx status code. Headers set under
- this condition are still used when, for example, a request is successfully
- proxied or generated by CGI, even when they have generated a failing status code.
When your action is a function of an existing header, you may need to specify
- a condition of always
, depending on which internal table the
- original header was set in. The table that corresponds to always
is
- used for locally generated error responses as well as successful responses.
+ table of responses headers this directive will operate against:
+ onsuccess
(default, can be omitted) or always
.
+ The difference between the two lists is that the headers contained in the
+ latter are added to the response even on error, and persisted across
+ internal redirects (for example, ErrorDocument handlers).
+
Note also that repeating this directive with both conditions makes sense in
some scenarios because always
is not a superset of
onsuccess
with respect to existing headers:
always
is used in the ultimate response.always
and not in the default table.onsuccess
condition.This difference between onsuccess
and always
is
+ a feature that resulted as a consequence of how httpd internally stores
+ headers for a HTTP response, since it does not offer any "normalized" single
+ list of headers. The main problem that can arise if the following concept
+ is not kept in mind while writing the configuration is that some HTTP responses
+ might end up with the same header duplicated (confusing users or sometimes even
+ HTTP clients). For example, suppose that you have a simple PHP proxy setup with
+ X-Foo: bar
header to each HTTP response. As described above,
+ always
table to store
+ headers, so a configuration like the following ends up in the wrong result, namely
+ having the header duplicated with both values:
To circumvent this limitation, there are some known configuration + patterns that can help, like the following:
+ +Separately from the condition parameter described above, you can limit an action based on HTTP status codes for e.g. proxied or CGI requests. See the example that uses %{REQUEST_STATUS} in the section above.
@@ -362,6 +386,14 @@ available in 2.4.10 and later argument (second argument if a condition is specified). This can be one of the following values: +Please read the difference between always
+ and onsuccess
headers list described above
+ before start reading the actions list, since that important
+ concept still applies. Each action, in fact, works as described
+ but only on the target headers list.
add