ПРОЕКТЫ 


  АРХИВ 


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: не корректная обработка POST в IE



Hello!

On Mon, Jan 25, 2010 at 03:38:09PM +0300, Alexandre Kalendarev wrote:

> 
> > Делать так:
> > 
> > ...
> >     rc = ngx_http_read_client_request_body(r, ngx_http_your_body_hander);
> > 
> >     if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
> >         return rc;
> >     }
> > 
> >     return NGX_DONE;
> > }
> > И всю остальную обработку - в ngx_http_your_body_handler().
> 
> 
> я раньше так и делал, но у меня постоянно возвращало NGX_AGAIN, а мне надо 
> обработать POST

Ещё раз:

Из handler'а - вызываем ngx_http_read_client_request_body().  
Когда тело запроса будет получено от клиента - позовётся 
body_handler(), в нём и следует продолжить работу.  Что именно 
происходит в промежутках - вас волновать не должно.

В частности, возврат NGX_AGAIN из 
ngx_http_read_client_request_body() - вполне нормален, и означает 
лишь что тело запроса ещё не получено или получено не полностью.

> > Вау.  Из phase позвали body, из body позвали phase, ...  Где-то 
> > тут надо менять логику.
> 
> мне самому этот кусок показался подозрительным, но оказывается стабильно 
> работает (но не с IE).

"обычно везёт, если использовать маленькие запросы, быструю 
локальную сеть и браузер посылающий заголовки и тело запроса в 
одном пакете" != "стабильно работает"

> > Переходим к следующему вопросу нашей программы.  Phase handler и 
> > content handler - вещи вообще говоря мало совместимые, по крайней 
> > мере если имеется ввиду CONTENT_PHASE.  
> 
> да, у меня CONTENT_PHASE
> 
> >Ибо content handler (aka 
> > clcf->handler) - он придуман специально для того, чтобы явно 
> > задавать обработчик для конкретного location'а (и игнорировать 
> > обработчики из content phase).
> 
> мне надо повесить обработку на конкретный локейшин. По этому мне 
> контент_ханлер подойдет.

Если вам нужна обработка в конкретном location'е, и при этом не 
нужен fallback в другие обработчики (именно так работает скажем 
модуль proxy) - вам вполне подойдёт clcf->handler.  Ставить 
обработчик на CONTENT_PHASE при этом не нужно.

Maxim Dounin

> > В определитесь что именно вам нужно, и сделайте один обработчик с 
> > вызовом ngx_http_read_client_request_body() как приведено выше.
> 
> 
> Ok, попробую.
> отпишусь...
> 
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@xxxxxxxxx
> http://nginx.org/mailman/listinfo/nginx-ru

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


 




Copyright © Lexa Software, 1996-2009.