mirror of
https://github.com/apache/httpd.git
synced 2025-08-07 04:02:58 +03:00
*) 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:
@@ -90,12 +90,25 @@ apr_status_t h2_request_rcreate(h2_request **preq, apr_pool_t *pool,
|
||||
return APR_EINVAL;
|
||||
}
|
||||
|
||||
if (!ap_strchr_c(authority, ':') && r->server && r->server->port) {
|
||||
apr_port_t defport = apr_uri_port_of_scheme(scheme);
|
||||
if (defport != r->server->port) {
|
||||
/* port info missing and port is not default for scheme: append */
|
||||
authority = apr_psprintf(pool, "%s:%d", authority,
|
||||
(int)r->server->port);
|
||||
/* The authority we carry in h2_request is the 'authority' part of
|
||||
* the URL for the request. r->hostname has stripped any port info that
|
||||
* might have been present. Do we need to add it?
|
||||
*/
|
||||
if (!ap_strchr_c(authority, ':')) {
|
||||
if (r->parsed_uri.port_str) {
|
||||
/* Yes, it was there, add it again. */
|
||||
authority = apr_psprintf(pool, "%s:%s", authority, r->parsed_uri.port_str);
|
||||
}
|
||||
else if (!r->parsed_uri.hostname && r->server && r->server->port) {
|
||||
/* If there was no hostname in the parsed URL, the URL was relative.
|
||||
* In that case, we restore port from our server->port, if it
|
||||
* is known and not the default port for the scheme. */
|
||||
apr_port_t defport = apr_uri_port_of_scheme(scheme);
|
||||
if (defport != r->server->port) {
|
||||
/* port info missing and port is not default for scheme: append */
|
||||
authority = apr_psprintf(pool, "%s:%d", authority,
|
||||
(int)r->server->port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user