Subrequests from body filters

Marat Dakota dakota at brokenpipe.ru
Mon Mar 25 14:46:09 UTC 2013


>> >> But is it ok to call next body filter in subrequest's body filter to
>> >> produce output to main request?
>> >> I mean ngx_http_next_body_filter(r->main, out).
>> >
>> > No.  You should call next body filter of the request you are
>> > working with.  It's postpone filter responsibility to manage
>> > subrequests output, and if you try to do this yourself instead -
>> > result will be undefined.
>>
>> It seems to work as expected for me. How can I cause problems with this?
>
> Undefined behaviour sometimes appear to work as expected.  This
> doesn't mean it's correct though.
>
> Depending on the exact place in a filter chain where you did it
> and various other factors like timings, results may vary from
> "nothing bad might happen, as r == r->main anyway" to "response
> will completely incorrect as wrong filters will be applied to the
> response body".
>
> Most trivial thing to test is probably a subrequest order, which
> likely will be wrong in your case if first subrequest will take
> longer to handle than second one.

Subrequests order doesn't matter much for me. I feed my library (the
one I write a Nginx module for) with a subrequests results in a
whatever order and my library returns next chunk of response only when
it is ready.

My library has just one function to call. This function returns the
next chunk of data (if any) to send as a response and/or a list of
subrequests to make. In every call to subrequest body filter I pass
subrequest's response to my library and get a new list of subrequests
(if any) and a new chunk of final response (if any). And so on, until
my library says it's done.

And if I really do something wrong in terms of Nginx architecture,
please, could you give me more details about how to achieve my goals
correctly?

Thank you for helping.

--
Marat



More information about the nginx-devel mailing list