ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re[2]: обработка POST & NGX_AGAIN



----- Alexandre Kalendarev <akalend@xxxxxxx> wrote:
> Валерий, 
> 
> а какой выход?
> как дождаться чтоб принять оставшуюся часть
> 
> да, судя по логам:
> r->request_body->buf->start=r->request_body->buf->pos 
> =r->request_body->buf->last

Зависит от хэндлера.

В content-хэндлерах так:

    rc = ngx_http_read_client_request_body(r, <хэндлер тела>);

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

    return NGX_DONE;

В хэндлерах фаз так:

    if(r->request_body == NULL) {
        rc = ngx_http_read_client_request_body(r, <хэндлер тела>);

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

        return NGX_DONE;
    }

    // Всё ещё принимаем тело?
    if(r->request_body->rest) {
        return NGX_DONE;
    }

    [.. в этом месте тело полностью принято ..]

Хэндлер тела должен завершить запрос или возобновить хэндлер фазы, иначе запрос 
зависнет. Приблизительно так:

static /* или нет static */ void
хэндлер_тела(ngx_http_request_t *r)
{
    ngx_int_t rc;

    [.. в этом месте тело полностью принято ..]

    rc = вызвать_хэндлер_фазы(r);

    if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
        ngx_http_finalize_request(r, rc);
    }
}

-- 
Regards,
Valery Kholodkov

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.