*) mod_http2: preserve the port number given in a HTTP/1.1

request that was Upgraded to HTTP/2. Fixes PR65881.



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1898146 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Stefan Eissing
2022-02-17 10:06:31 +00:00
parent d27a32da69
commit 6137cd7b74
4 changed files with 63 additions and 6 deletions

View File

@ -7,6 +7,7 @@ print()
print("{")
print(" \"https\" : \"%s\"," % (os.getenv('HTTPS', '')))
print(" \"host\" : \"%s\"," % (os.getenv('SERVER_NAME', '')))
print(" \"port\" : \"%s\"," % (os.getenv('SERVER_PORT', '')))
print(" \"protocol\" : \"%s\"," % (os.getenv('SERVER_PROTOCOL', '')))
print(" \"ssl_protocol\" : \"%s\"," % (os.getenv('SSL_PROTOCOL', '')))
print(" \"h2\" : \"%s\"," % (os.getenv('HTTP2', '')))

View File

@ -0,0 +1,40 @@
import pytest
from .env import H2Conf
class TestProxyPort:
@pytest.fixture(autouse=True, scope='class')
def _class_scope(self, env):
conf = H2Conf(env, extras={
'base': [
f'Listen {env.proxy_port}',
'Protocols h2c http/1.1',
'LogLevel proxy_http2:trace2 proxy:trace2',
],
f'cgi.{env.http_tld}': [
"Header unset Server",
"Header always set Server cgi",
]
})
conf.add_vhost_cgi(proxy_self=False, h2proxy_self=False)
conf.start_vhost(domains=[f"test1.{env.http_tld}"], port=env.proxy_port)
conf.add([
'Protocols h2c',
'RewriteEngine On',
'RewriteRule "^/(.*)$" "h2c://%{HTTP_HOST}/$1"[NC,P]',
'ProxyPassMatch / "h2c://$1/"',
])
conf.end_vhost()
conf.install()
assert env.apache_restart() == 0
# Test PR 65881
# h2c upgraded request via a dynamic proxy onto another port
def test_h2_502_01(self, env):
url = f'http://localhost:{env.http_port}/hello.py'
r = env.curl_get(url, 5, options=['--http2',
'--proxy', f'localhost:{env.proxy_port}'])
assert r.response['status'] == 200
assert r.json['port'] == f'{env.http_port}'