Bug in request.headers_out initialization?

Fasih faskiri.devel at gmail.com
Thu Nov 24 05:06:11 UTC 2011


Hi Igor

Really thankful for your patience with me. I think I now understood what
you are saying :).

To summarize, header.hash == 0 is used as a flag
in ngx_http_header_filter_module.c:http_header_filter to test whether to
send the header downstream or not. Setting it to 1(or anything non-zero) is
to ensure that the header is sent downstream.

Since headers_out is not used by nginx core to do hash lookups, it doesnt
calculate hash or lowcase_key, however modules like proxy or fastcgi use
the hash value for their own benefit in which case they ensure that the
hash/lowcase_key is initialized.

I hope I got it right this time.

Thanks again for your time and patience.

+Fasih

On Thu, Nov 24, 2011 at 12:20 AM, Igor Sysoev <igor at sysoev.ru> wrote:

> On Wed, Nov 23, 2011 at 10:58:41PM +0530, Fasih wrote:
> > On Wed, Nov 23, 2011 at 10:38 PM, Igor Sysoev <igor at sysoev.ru> wrote:
> >
> > > On Wed, Nov 23, 2011 at 10:32:27PM +0530, Fasihullah Askiri wrote:
> > > > Sorry, I am not sure I understood you correctly. It is used in
> headers_in
> > > > for look up into headers_in_hash OK. But what about headers_out?
> > >
> > > "lowcase_key" in headers_out may be not set if these headers are not
> > > proxied/fastcgied/etc.
> > >
> > > > ngx_http_proxy_process_header parses the upstream response headers
> > > > using ngx_http_parse_header_line, thereby setting hash/lowcase_key.
> This
> > > > function sets headers_out which I use. The question I have is, is it
> safe
> > > > to use the headers_out.....lowcase_key, should I check for
> > > > headers_out.headers.part.elt[it].hash before I can use lowcase_key or
> > > > should I check for something else?
> > >
> > > "hash" does not mean that "lowcase_key" is set.
> > > If nginx needs to find headers using hash, it sets "lowcase_key" and
> > > calculates "hash".
> > >
> > So, if header "xyz-header" is not expected to be found in a hash,  nginx
> > would not calculate the lowcase_key, but will it also set
> > headers_out.header.elt.hash to some value to signal that it has not
> > calculated the lowcase_key?
>
> No, "hash" is not a flag for "lowcase_key".
>
> "hash" is used as a hash value of "lowcase_key" for lookup in header
> hashes.
> And "hash" is used as flag only for header output filter.
>
> > > Besides nginx uses "hash" only in header output filter.
> > >
> > Understood, but the problem is because I am trying to reuse that variable
> > probably for something that it was intended to be used, just wanted to
> find
> > out how to use it if at all I can use it.
>
> nginx does not calculate "hash" and does not provide "lowcase_key" for
> headers_out, since it does not use it.
>
>
> --
> Igor Sysoev
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20111124/6f459ac9/attachment-0001.html>


More information about the nginx-devel mailing list