# HG changeset patch # User Roman Arutyunyan # Date 1591102754 -10800 # Node ID 833898b35b241de0e645da6964a50596af9e67bb # Parent 90b02ff6b003ddafe795b2df18a1163aa75a9677 Decoupled validation of Host and :authority for HTTP/2 and HTTP/3. Previously an error was triggered for HTTP/2 when host with port was passed by client. diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -2065,10 +2065,18 @@ ngx_http_process_request_header(ngx_http return NGX_ERROR; } - if (r->http_version >= NGX_HTTP_VERSION_20) { + if (r->headers_in.host == NULL && r->http_version == NGX_HTTP_VERSION_20) { + ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, + "client sent HTTP/2 request without " + "\":authority\" or \"Host\" header"); + ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST); + return NGX_ERROR; + } + + if (r->http_version == NGX_HTTP_VERSION_30) { if (r->headers_in.server.len == 0) { ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, - "client sent HTTP request without " + "client sent HTTP/3 request without " "\":authority\" or \"Host\" header"); ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST); return NGX_ERROR; @@ -2082,7 +2090,7 @@ ngx_http_process_request_header(ngx_http != 0) { ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, - "client sent HTTP request with different " + "client sent HTTP/3 request with different " "values of \":authority\" and \"Host\" headers"); ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST); return NGX_ERROR;