Nginx stores the response headers in the headers ngx_http_headers_out_t
ngx_list_t headers
and also for certain headers , in a corresponding variable in
headers_out
e.g. ngx_table_elt_t *content_encoding;
The body filter e.g. gunzip operate only on content_encoding variable.
So after the gunzip filter executes, the content_encoding value in the
headers variable will be gzip (because the response was received as
compressed and the content encoding was gzip) but the value of
content_encoding variable will be blank because the gunzip filter would
have decompressed the content and therefore the content encoding is no
longer gzip.
Are all the body filters than expected to look at the variable within
the headers_out structure ? If so what is the use case of maintaining
(possibly) different values for the same headers at different places
Thanks for any answers
On Fri, Jul 11, 2014 at 07:50:37PM +0800, Rv Rv wrote:
received as compressed and the content encoding was gzip) but
the value of content_encoding variable will be blank because the
gunzip filter would have decompressed the content and therefore
the content encoding is no longer gzip.
Are all the body filters than expected to look at the variable
within the headers_out structure ? If so what is the use case
of maintaining (possibly) different values for the same headers
at different places
In the gunzip filter, you may notice the following:
Clears the “hash” value of the header in the headers list. For
response headers this means that the header is to be ignored. See
ngx_http_header_filter() to find out how it’s handled.
Clears the r->headers_out.content_encoding pointer, to make
other filters know that there is no Content-Encoding headers.
This is basically identical to what various ngx_http_clear_xxx()
macros do, see src/http/ngx_http_core_module.h.