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;