Commit 1b42a39a authored by Luca Toscano's avatar Luca Toscano
Browse files

mod_rewrite/core: avoid the 'Vary: Host' header

In PR 58231 is was brought up that httpd adds the
Vary: Host header whenever a condition is set to true
in mod_rewrite or in an <If> block.

The https://tools.ietf.org/html/rfc7231#section-7.1.4
section seems to disallow this use case:

"The "Vary" header field in a response describes "
"what parts of a request message, "
"aside from the method, Host header field, [...]"

I had a chat with the folks in #traffic-server and
they don't see much point in having a Vary: Host header,
plus it was reported that Varnish doesn't like it very
much (namely it does not cache the response when
it sees the header, links of the report in the PR).

I don't see much value in this behavior of httpd so
I am inclined to remove this response header value,
but I'd be glad to get a more experienced opinion.



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1808746 13f79535-47bb-0310-9956-ffa450edef68
parent b714e3c2
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
                                                         -*- coding: utf-8 -*-
Changes with Apache 2.5.0

  *) mod_rewrite, core: Avoid the 'Vary: Host' response header when HTTP_HOST is
     used in a condition that evaluates to true. PR 58231 [Luca Toscano]

  *) mod_md: v0.9.6: a "MDRequireHttps permament" configured domain automatically sends out
     HSTS (rfc 6797) headers in https: responses. [Stefan Eissing]

+4 −1
Original line number Diff line number Diff line
@@ -2035,7 +2035,10 @@ static char *lookup_variable(char *var, rewrite_ctx *ctx)

            case 'S':
                if (!strcmp(var, "HTTP_HOST")) {
                    result = lookup_header("Host", ctx);
                    /* Skip the 'Vary: Host' header combination
                     * as indicated in rfc7231 section-7.1.4
                     */
                    result = apr_table_get(ctx->r->headers_in, "Host");
                }
                break;

+6 −1
Original line number Diff line number Diff line
@@ -1606,7 +1606,12 @@ static const char *req_header_var_fn(ap_expr_eval_ctx_t *ctx, const void *data)
        return "";

    name = req_header_header_names[index];
    /* Skip the 'Vary: Host' header combination
     * as indicated in rfc7231 section-7.1.4
     */
    if (strcmp(name, "Host")){
        add_vary(ctx, name);
    }
    return apr_table_get(ctx->r->headers_in, name);
}