[dev] some questions about subrequests

Sergey Bochenkov bachan at j3qq4.org
Fri Mar 28 16:14:01 MSK 2008


On Fri, 28 Mar 2008 13:21:31 +0100
Manlio Perillo <manlio_perillo at libero.it>
wrote:

> Sergey Bochenkov ha scritto:
> > NGX_HTTP_ZERO_IN_URI:
> > 
> > src/http/ngx_http_core_module.c:
> >     sr->zero_in_uri = (flags & NGX_HTTP_ZERO_IN_URI) != 0;
> > 
> > src/http/ngx_http_request.h:
> >     /* URI with "\0" or "%00" */
> >     unsigned zero_in_uri:1;
> > 
> > Obviously, IMHO.
> > 
> 
> Yes, this was easy!
> 
> > 
> > NGX_HTTP_SUBREQUEST_IN_MEMORY:
> > 
> > src/http/ngx_http_core_module.c:
> > sr->subrequest_in_memory = (flags & NGX_HTTP_SUBREQUEST_IN_MEMORY) != 0;
> > 
> > src/http/ngx_http_upstream.c:
> >     if (!r->subrequest_in_memory) {
> >         ngx_http_upstream_send_response(r, u);
> >         return;
> >     }
> > 
> >     /* subrequest content in memory */
> > 
> >     ...
> > 
> > So, as I can understand from using-of-subrequests point of view,
> > r->subrequest_in_memory flag tells ngx_http_upstream_module to save a
> > pointer to the full chain of response buffers in r->upstream->out_bufs
> > chain-link. And *not-to-free* that buffers after subrequest was
> > finished.
> > 
> > Fix me, if I'm wrong.
> > 
> 
> I'm not sure, but it seems that I can safely set flags to 0.
> 

If you need to keep the upstream response in memory,
NGX_HTTP_SUBREQUEST_IN_MEMORY flag may be useful for you. You can
also set the r->filter_need_in_memory flag in header-filter and read
full response body in the body-filter.

> 
> I have one more, important, question.
> When will be the post_subrequest->handler called?
> Always after ngx_http_subrequest returns?
> 

The ngx_http_subrequest()-function is asyncronous and returns
immediately after all appropriate fields of ngx_http_request_t
structure will be filled. It doesn't wait for any upstream answer at
all.

The handler will be called after the end of the *subrequest*, not the
end of ngx_http_subrequest()-function call.

Here you can find the appropriate discussion (unfortunately, in
russian): http://article.gmane.org/gmane.comp.web.nginx.russian/11160

> 
> 
> Thanks  Manlio Perillo
> 
> 







More information about the nginx mailing list