From: Stefan Eissing Date: Mon, 9 Jan 2023 07:47:29 +0000 (+0000) Subject: Merge of httpd/httpd/trunk:r1906051 X-Git-Tag: 2.4.55-rc1-candidate~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=51484e5d8f175e5f2dacf5d5cab3183a17562461;p=thirdparty%2Fapache%2Fhttpd.git Merge of httpd/httpd/trunk:r1906051 *) mod_proxy_http2: apply the standard httpd content type handling to responses from the backend, as other proxy modules do. Fixes PR 66391. Thanks to Jérôme Billiras for providing the patch. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1906476 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/changes-entries/h2_proxy_content_type.txt b/changes-entries/h2_proxy_content_type.txt new file mode 100644 index 00000000000..d35f7c2ea71 --- /dev/null +++ b/changes-entries/h2_proxy_content_type.txt @@ -0,0 +1,4 @@ + *) mod_proxy_http2: apply the standard httpd content type handling + to responses from the backend, as other proxy modules do. Fixes PR 66391. + Thanks to Jérôme Billiras for providing the patch. + [Stefan Eissing] \ No newline at end of file diff --git a/modules/http2/h2_proxy_session.c b/modules/http2/h2_proxy_session.c index 3da57f9e739..c3f2ff30101 100644 --- a/modules/http2/h2_proxy_session.c +++ b/modules/http2/h2_proxy_session.c @@ -447,6 +447,7 @@ static void h2_proxy_stream_end_headers_out(h2_proxy_stream *stream) h2_proxy_session *session = stream->session; request_rec *r = stream->r; apr_pool_t *p = r->pool; + const char *buf; /* Now, add in the cookies from the response to the ones already saved */ apr_table_do(add_header, stream->saves, r->headers_out, "Set-Cookie", NULL); @@ -456,6 +457,10 @@ static void h2_proxy_stream_end_headers_out(h2_proxy_stream *stream) apr_table_unset(r->headers_out, "Set-Cookie"); r->headers_out = apr_table_overlay(p, r->headers_out, stream->saves); } + + if ((buf = apr_table_get(r->headers_out, "Content-Type"))) { + ap_set_content_type(r, apr_pstrdup(p, buf)); + } /* handle Via header in response */ if (session->conf->viaopt != via_off diff --git a/test/modules/http2/test_600_h2proxy.py b/test/modules/http2/test_600_h2proxy.py index 65b94e23e12..9591ce57b72 100644 --- a/test/modules/http2/test_600_h2proxy.py +++ b/test/modules/http2/test_600_h2proxy.py @@ -81,8 +81,7 @@ class TestH2Proxy: r = env.curl_get(url, 5) assert r.response["status"] == 200 assert r.json["h2_stream_id"] == "1" - # httpd 2.5.0 disables reuse, not matter the config - if enable_reuse == "on" and not env.httpd_is_at_least("2.5.0"): + if enable_reuse == "on": # reuse is not guarantueed for each request, but we expect some # to do it and run on a h2 stream id > 1 reused = False @@ -128,9 +127,7 @@ class TestH2Proxy: url = env.mkurl("https", "cgi", f"/h2proxy/{env.http_port2}/hello.py") r = env.curl_get(url, 5) assert r.response["status"] == 200 - exp_port = env.http_port if enable_reuse == "on" \ - and not env.httpd_is_at_least("2.5.0")\ - else env.http_port2 + exp_port = env.http_port if enable_reuse == "on" else env.http_port2 assert int(r.json["port"]) == exp_port # lets do some error tests