Range filter: clearing of pre-existing Content-Range headers.

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.
This commit is contained in:
Maxim Dounin 2022-07-15 07:01:44 +03:00
parent ec2ecdd62b
commit ce67cac0ba
1 changed files with 13 additions and 0 deletions

View 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;