diff --git a/modules/http2/h2_request.c b/modules/http2/h2_request.c index 3737902c5c..27c5757702 100644 --- a/modules/http2/h2_request.c +++ b/modules/http2/h2_request.c @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -134,22 +135,28 @@ apr_status_t h2_request_rwrite(h2_request *req, request_rec *r) apr_status_t status; req->method = r->method; - req->authority = r->hostname; - req->path = r->uri; req->scheme = (r->parsed_uri.scheme? r->parsed_uri.scheme - : r->server->server_scheme); - - if (!ap_strchr_c(req->authority, ':') && r->parsed_uri.port_str) { - req->authority = apr_psprintf(r->pool, "%s:%s", req->authority, - r->parsed_uri.port_str); + : ap_http_scheme(r)); + req->authority = r->hostname; + req->path = apr_uri_unparse(r->pool, &r->parsed_uri, + APR_URI_UNP_OMITSITEPART); + + if (!ap_strchr_c(req->authority, ':') && r->server) { + req->authority = apr_psprintf(r->pool, "%s:%d", req->authority, + (int)r->server->port); } + AP_DEBUG_ASSERT(req->scheme); + AP_DEBUG_ASSERT(req->authority); + AP_DEBUG_ASSERT(req->path); + AP_DEBUG_ASSERT(req->method); + status = add_all_h1_header(req, r->pool, r->headers_in); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, status, r, "h2_request(%d): rwrite %s host=%s://%s%s", req->id, req->method, req->scheme, req->authority, req->path); - + return status; } diff --git a/modules/http2/h2_util.c b/modules/http2/h2_util.c index acfc9a61f7..963d9ae354 100644 --- a/modules/http2/h2_util.c +++ b/modules/http2/h2_util.c @@ -867,6 +867,10 @@ h2_ngheader *h2_util_ngheader_make_req(apr_pool_t *p, size_t n; AP_DEBUG_ASSERT(req); + AP_DEBUG_ASSERT(req->scheme); + AP_DEBUG_ASSERT(req->authority); + AP_DEBUG_ASSERT(req->path); + AP_DEBUG_ASSERT(req->method); n = 4; apr_table_do(count_header, &n, req->headers, NULL);