[nginx] HTTP/2: factored out constructing the Host header.
noreply at nginx.com
noreply at nginx.com
Fri Aug 22 17:02:10 UTC 2025
details: https://github.com/nginx/nginx/commit/a238bb3d22c251647d04cf07b35c218994ab1ff5
branches: master
commit: a238bb3d22c251647d04cf07b35c218994ab1ff5
user: Sergey Kandaurov <pluknet at nginx.com>
date: Wed, 23 Jul 2025 14:32:34 +0400
description:
HTTP/2: factored out constructing the Host header.
No functional changes.
---
src/http/v2/ngx_http_v2.c | 87 ++++++++++++++++++++++++++---------------------
1 file changed, 48 insertions(+), 39 deletions(-)
diff --git a/src/http/v2/ngx_http_v2.c b/src/http/v2/ngx_http_v2.c
index 91a28b228..c9ef6d7ee 100644
--- a/src/http/v2/ngx_http_v2.c
+++ b/src/http/v2/ngx_http_v2.c
@@ -158,6 +158,8 @@ static ngx_int_t ngx_http_v2_construct_request_line(ngx_http_request_t *r);
static ngx_int_t ngx_http_v2_cookie(ngx_http_request_t *r,
ngx_http_v2_header_t *header);
static ngx_int_t ngx_http_v2_construct_cookie_header(ngx_http_request_t *r);
+static ngx_int_t ngx_http_v2_construct_host_header(ngx_http_request_t *r,
+ ngx_str_t *value);
static void ngx_http_v2_run_request(ngx_http_request_t *r);
static ngx_int_t ngx_http_v2_process_request_body(ngx_http_request_t *r,
u_char *pos, size_t size, ngx_uint_t last, ngx_uint_t flush);
@@ -3517,45 +3519,7 @@ ngx_http_v2_parse_scheme(ngx_http_request_t *r, ngx_str_t *value)
static ngx_int_t
ngx_http_v2_parse_authority(ngx_http_request_t *r, ngx_str_t *value)
{
- ngx_table_elt_t *h;
- ngx_http_header_t *hh;
- ngx_http_core_main_conf_t *cmcf;
-
- static ngx_str_t host = ngx_string("host");
-
- h = ngx_list_push(&r->headers_in.headers);
- if (h == NULL) {
- return NGX_ERROR;
- }
-
- h->hash = ngx_hash(ngx_hash(ngx_hash('h', 'o'), 's'), 't');
-
- h->key.len = host.len;
- h->key.data = host.data;
-
- h->value.len = value->len;
- h->value.data = value->data;
-
- h->lowcase_key = host.data;
-
- cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
-
- hh = ngx_hash_find(&cmcf->headers_in_hash, h->hash,
- h->lowcase_key, h->key.len);
-
- if (hh == NULL) {
- return NGX_ERROR;
- }
-
- if (hh->handler(r, h, hh->offset) != NGX_OK) {
- /*
- * request has been finalized already
- * in ngx_http_process_host()
- */
- return NGX_ABORT;
- }
-
- return NGX_OK;
+ return ngx_http_v2_construct_host_header(r, value);
}
@@ -3734,6 +3698,51 @@ ngx_http_v2_construct_cookie_header(ngx_http_request_t *r)
}
+static ngx_int_t
+ngx_http_v2_construct_host_header(ngx_http_request_t *r, ngx_str_t *value)
+{
+ ngx_table_elt_t *h;
+ ngx_http_header_t *hh;
+ ngx_http_core_main_conf_t *cmcf;
+
+ static ngx_str_t host = ngx_string("host");
+
+ h = ngx_list_push(&r->headers_in.headers);
+ if (h == NULL) {
+ return NGX_ERROR;
+ }
+
+ h->hash = ngx_hash(ngx_hash(ngx_hash('h', 'o'), 's'), 't');
+
+ h->key.len = host.len;
+ h->key.data = host.data;
+
+ h->value.len = value->len;
+ h->value.data = value->data;
+
+ h->lowcase_key = host.data;
+
+ cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
+
+ hh = ngx_hash_find(&cmcf->headers_in_hash, h->hash,
+ h->lowcase_key, h->key.len);
+
+ if (hh == NULL) {
+ return NGX_ERROR;
+ }
+
+ if (hh->handler(r, h, hh->offset) != NGX_OK) {
+ /*
+ * request has been finalized already
+ * in ngx_http_process_host()
+ */
+ return NGX_ABORT;
+ }
+
+ return NGX_OK;
+}
+
+
static void
ngx_http_v2_run_request(ngx_http_request_t *r)
{
More information about the nginx-devel
mailing list