Re: считать POST реквест в буффер

Maxim Dounin mdounin на mdounin.ru
Вс Дек 12 02:34:10 MSK 2010


Hello!

On Sat, Dec 11, 2010 at 05:55:34PM -0500, magz wrote:

> >r->request_body_in_single_buf = 1;
> >rc = ngx_http_read_client_request_body(r, ngx_http_my_body_handler);
> 
> При установке  request_body_in_single_buf в 1, в rc
> возвращается NGX_AGAIN.  Что на сколько я
> понимаю означает что не полностью
> заполнился буфер r->request_body->buf

После вызова ngx_http_read_client_request_body() нужно сделать 
ровно то, что написал Виталий, а именно:

    if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
        return rc;
    }

    return NGX_DONE;

Все остальные действия следует выполнять в обработчике 
ngx_http_my_body_handler (когда nginx его позовёт).

И, чтобы два раза не вставать:

1. Я крайне не рекомендую пользоваться r->request_body->buf.  Это 
указатель на буфер чтения тела запроса, а не на само тело.  Само тело 
следует получить через цепочку r->request_body->bufs.  Для случая 
r->request_body_in_single_buf = 1 там будет один буфер.

2. Если тело больше, чем client_body_buffer_size[1], то оно 
отправится на диск.  Это следует иметь ввиду.

[1] http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#client_body_buffer_size

Maxim Dounin



Подробная информация о списке рассылки nginx-ru