Multiple message-header fields handling
Igor Sysoev
is at rambler-co.ru
Wed Oct 3 19:14:32 MSD 2007
On Wed, Oct 03, 2007 at 05:07:35PM +0200, Manlio Perillo wrote:
> Igor Sysoev ha scritto:
> >On Wed, Oct 03, 2007 at 04:09:49PM +0200, Manlio Perillo wrote:
> >
> >>Igor Sysoev ha scritto:
> >>>On Tue, Oct 02, 2007 at 10:02:38PM +0200, Manlio Perillo wrote:
> >>>
> >>>>I have found a "problem" with multiple message-header fields handling
> >>>>in Nginx.
> >>>>
> >>>[...]
> >>>>Igor, do you plan to add this feature in a future version?
> >>>nginx does not join headers as Apache does.
> >>Ok.
> >>
> >>>However, all headers are passed to a proxied server/etc as is if they
> >>>are not overwritten.
> >>The problem is that a WSGI application receives the headers in a Python
> >>dictionary (an associative array).
> >>This means that I MUST fold the headers.
> >
> >All headers are available in r->headers_in.headers list.
> >
>
> In fact I iterate over this list doing (pseudo Python code):
>
> environ = {}
> for key, value in r->headers_in.headers list:
> environ[key] = value
>
>
> The problem is that I only save the last multi line header.
>
> A solution is to do:
>
> environ = {}
> for key, value in r->headers_in.headers list:
> # check if this is a multiline header
> old = environ.get(key, None)
> if old is None:
> environ[key] = value
> else:
> # fold the header value
> environ[key] = old + ", " + value
>
>
> This is not very efficient, if I have to do many strings concatenations.
Actually requests with multi line headers are seldom.
> >>>As to the cookies nginx treats them specially and $http_cookie includes
> >>>all Cookie header fields.
> >>>
> >>Cookies are a mess.
> >>Does nginx apply some for of preprocessing?
> >
> >I do not understand the question.
>
> http://kristol.org/cookie/errata.html
I still do not understand.
$http_cookie joins cookies using "; " without any processing, see
ngx_http_variable_headers().
--
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx
mailing list