processing a request without body

Muhammad Nuzaihan zaihan at unrealasia.net
Fri Jan 12 14:17:42 UTC 2024


Hi Maxim,

Thank you so much for your explaination.

I have another question. If i have an empty string in my payload, it
skips the phase handler completely.

Example: curl -X POST http://localhost/proxy/profile/alice/comment -d
'' -H 'Content-Type: application/json'

the flag "-d ''"

I do doing it at NGX_HTTP_ACCESS_PHASE in the handler. It seems that
if "content_length = 0", it skips the access phase handler as well?

Does this have to do with what we discussed?

On Fri, Jan 12, 2024 at 5:59 AM Maxim Dounin <mdounin at mdounin.ru> wrote:
>
> Hello!
>
> On Fri, Jan 12, 2024 at 03:26:39AM +0800, Muhammad Nuzaihan wrote:
>
> > Hi Maxim,
> >
> > After searching the archives, I found the solution which you had
> > answered before:
> > https://www.ruby-forum.com/t/trouble-getting-the-request-body-of-a-http-post/180463/4
> >
> > The code that reads the body is:
> >     rc = ngx_http_read_client_request_body(r,
> >                               ngx_http_foo_body_handler);
> >
> >     if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
> >       return rc;
> >     }
> >
> > Can i buy you coffee?
>
> You may want to start with basic examples and the dev guide,
> specifically:
>
> https://nginx.org/en/docs/dev/development_guide.html#http_request_body
>
> Note though that reading the request body during phase processing,
> in contrast to doing so in a content handler, requires special
> precautions.  In particular, you'll have to call
> ngx_http_finalize_request(NGX_DONE) to ensure correct request
> reference counting:
>
> https://hg.nginx.org/nginx/file/tip/src/http/modules/ngx_http_mirror_module.c#l120
>
> Further, to resuming phase processing after reading the request
> body you'll have to restore r->write_event_handler and call
> ngx_http_core_run_phases().  See here in the mirror module for an
> example:
>
> https://hg.nginx.org/nginx/file/tip/src/http/modules/ngx_http_mirror_module.c#l144
>
> Hope this helps.
>
> --
> Maxim Dounin
> http://mdounin.ru/
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> https://mailman.nginx.org/mailman/listinfo/nginx-devel


More information about the nginx-devel mailing list