[nginx] HTTP/2: improved error messages about too long headers.
Maxim Dounin
mdounin at mdounin.ru
Sat Jun 20 03:59:08 UTC 2026
details: http://freenginx.org/hg/nginx/rev/cbb4a5eeb1d5
branches:
changeset: 9564:cbb4a5eeb1d5
user: Maxim Dounin <mdounin at mdounin.ru>
date: Sat Jun 20 06:14:30 2026 +0300
description:
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.
diffstat:
src/http/v2/ngx_http_v2_filter_module.c | 16 ++++++++--------
1 files changed, 8 insertions(+), 8 deletions(-)
diffs (43 lines):
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