Mercurial > hg > nginx
comparison src/http/modules/ngx_http_range_filter_module.c @ 8057:ae2d62bb12c0
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.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 15 Jul 2022 07:01:44 +0300 |
parents | d26db4f82d7d |
children |
comparison
equal
deleted
inserted
replaced
8056:0422365794f7 | 8057:ae2d62bb12c0 |
---|---|
423 content_range = ngx_list_push(&r->headers_out.headers); | 423 content_range = ngx_list_push(&r->headers_out.headers); |
424 if (content_range == NULL) { | 424 if (content_range == NULL) { |
425 return NGX_ERROR; | 425 return NGX_ERROR; |
426 } | 426 } |
427 | 427 |
428 if (r->headers_out.content_range) { | |
429 r->headers_out.content_range->hash = 0; | |
430 } | |
431 | |
428 r->headers_out.content_range = content_range; | 432 r->headers_out.content_range = content_range; |
429 | 433 |
430 content_range->hash = 1; | 434 content_range->hash = 1; |
431 content_range->next = NULL; | 435 content_range->next = NULL; |
432 ngx_str_set(&content_range->key, "Content-Range"); | 436 ngx_str_set(&content_range->key, "Content-Range"); |
580 if (r->headers_out.content_length) { | 584 if (r->headers_out.content_length) { |
581 r->headers_out.content_length->hash = 0; | 585 r->headers_out.content_length->hash = 0; |
582 r->headers_out.content_length = NULL; | 586 r->headers_out.content_length = NULL; |
583 } | 587 } |
584 | 588 |
589 if (r->headers_out.content_range) { | |
590 r->headers_out.content_range->hash = 0; | |
591 r->headers_out.content_range = NULL; | |
592 } | |
593 | |
585 return ngx_http_next_header_filter(r); | 594 return ngx_http_next_header_filter(r); |
586 } | 595 } |
587 | 596 |
588 | 597 |
589 static ngx_int_t | 598 static ngx_int_t |
594 r->headers_out.status = NGX_HTTP_RANGE_NOT_SATISFIABLE; | 603 r->headers_out.status = NGX_HTTP_RANGE_NOT_SATISFIABLE; |
595 | 604 |
596 content_range = ngx_list_push(&r->headers_out.headers); | 605 content_range = ngx_list_push(&r->headers_out.headers); |
597 if (content_range == NULL) { | 606 if (content_range == NULL) { |
598 return NGX_ERROR; | 607 return NGX_ERROR; |
608 } | |
609 | |
610 if (r->headers_out.content_range) { | |
611 r->headers_out.content_range->hash = 0; | |
599 } | 612 } |
600 | 613 |
601 r->headers_out.content_range = content_range; | 614 r->headers_out.content_range = content_range; |
602 | 615 |
603 content_range->hash = 1; | 616 content_range->hash = 1; |