[PATCH 1 of 3] HTTP/2: improved error messages about too long headers

Maxim Dounin mdounin at mdounin.ru
Sat Jun 13 10:41:26 UTC 2026


# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1781346963 -10800
#      Sat Jun 13 13:36:03 2026 +0300
# Node ID e83db11197c688c132055e5ff0fef582890a848e
# Parent  ba68cb5eeb1a46c189a1baef5f4b3b083a2f77e0
HTTP/2: improved error messages about too long headers.

Error logging is limited to NGX_MAX_ERROR_STR (2048 bytes), and trying
to fully log headers which are longer than NGX_HTTP_V2_MAX_FIELD (~2
megabytes) doesn't make sense and will hide important details about the
request if the error will indeed happen.  Instead, we now log only first
256 bytes of the too long name or value.

diff --git a/src/http/v2/ngx_http_v2_filter_module.c b/src/http/v2/ngx_http_v2_filter_module.c
--- a/src/http/v2/ngx_http_v2_filter_module.c
+++ b/src/http/v2/ngx_http_v2_filter_module.c
@@ -370,15 +370,15 @@ ngx_http_v2_header_filter(ngx_http_reque
 
         if (header[i].key.len > NGX_HTTP_V2_MAX_FIELD) {
             ngx_log_error(NGX_LOG_CRIT, fc->log, 0,
-                          "too long response header name: \"%V\"",
-                          &header[i].key);
+                          "too long response header name: \"%*s...\"",
+                          256, header[i].key.data);
             return NGX_ERROR;
         }
 
         if (header[i].value.len > NGX_HTTP_V2_MAX_FIELD) {
             ngx_log_error(NGX_LOG_CRIT, fc->log, 0,
-                          "too long response header value: \"%V: %V\"",
-                          &header[i].key, &header[i].value);
+                          "too long response header value: \"%V: %*s...\"",
+                          &header[i].key, 256, header[i].value.data);
             return NGX_ERROR;
         }
 
@@ -778,15 +778,15 @@ ngx_http_v2_create_trailers_frame(ngx_ht
 
         if (header[i].key.len > NGX_HTTP_V2_MAX_FIELD) {
             ngx_log_error(NGX_LOG_CRIT, fc->log, 0,
-                          "too long response trailer name: \"%V\"",
-                          &header[i].key);
+                          "too long response trailer name: \"%*s...\"",
+                          256, header[i].key.data);
             return NULL;
         }
 
         if (header[i].value.len > NGX_HTTP_V2_MAX_FIELD) {
             ngx_log_error(NGX_LOG_CRIT, fc->log, 0,
-                          "too long response trailer value: \"%V: %V\"",
-                          &header[i].key, &header[i].value);
+                          "too long response trailer value: \"%V: %*s...\"",
+                          &header[i].key, 256, header[i].value.data);
             return NULL;
         }
 



More information about the nginx-devel mailing list