]> git.kaiwu.me - nginx.git/commitdiff
Decoupled validation of Host and :authority for HTTP/2 and HTTP/3.
authorRoman Arutyunyan <arut@nginx.com>
Tue, 2 Jun 2020 12:59:14 +0000 (15:59 +0300)
committerRoman Arutyunyan <arut@nginx.com>
Tue, 2 Jun 2020 12:59:14 +0000 (15:59 +0300)
Previously an error was triggered for HTTP/2 when host with port was passed
by client.

src/http/ngx_http_request.c

index 23b28c24319a0adbcab3bd96d9efdd73ed12eb58..ac5937347f7ccafbaf956e894388c596606e06e8 100644 (file)
@@ -2065,10 +2065,18 @@ ngx_http_process_request_header(ngx_http_request_t *r)
         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_request_t *r)
                    != 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;