]> git.kaiwu.me - nginx.git/commitdiff
Range filter: clearing of pre-existing Content-Range headers.
authorMaxim Dounin <mdounin@mdounin.ru>
Fri, 15 Jul 2022 04:01:44 +0000 (07:01 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Fri, 15 Jul 2022 04:01:44 +0000 (07:01 +0300)
Some servers might emit Content-Range header on 200 responses, and this
does not seem to contradict RFC 9110: as per RFC 9110, the Content-Range
header has no meaning for status codes other than 206 and 416.  Previously
this resulted in duplicate Content-Range headers in nginx responses handled
by the range filter.  Fix is to clear pre-existing headers.

src/http/modules/ngx_http_range_filter_module.c

index fa408b792aec860c0c0af3e239cd97ded89d693b..27d1875c8e0b0abc9253e791a63fbe178e2df6cb 100644 (file)
@@ -425,6 +425,10 @@ ngx_http_range_singlepart_header(ngx_http_request_t *r,
         return NGX_ERROR;
     }
 
+    if (r->headers_out.content_range) {
+        r->headers_out.content_range->hash = 0;
+    }
+
     r->headers_out.content_range = content_range;
 
     content_range->hash = 1;
@@ -582,6 +586,11 @@ ngx_http_range_multipart_header(ngx_http_request_t *r,
         r->headers_out.content_length = NULL;
     }
 
+    if (r->headers_out.content_range) {
+        r->headers_out.content_range->hash = 0;
+        r->headers_out.content_range = NULL;
+    }
+
     return ngx_http_next_header_filter(r);
 }
 
@@ -598,6 +607,10 @@ ngx_http_range_not_satisfiable(ngx_http_request_t *r)
         return NGX_ERROR;
     }
 
+    if (r->headers_out.content_range) {
+        r->headers_out.content_range->hash = 0;
+    }
+
     r->headers_out.content_range = content_range;
 
     content_range->hash = 1;