ПРОЕКТЫ 


  АРХИВ 


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: платная доработк а nginx



On Wed, Jan 28, 2009 at 04:48:25PM +0300, Igor Sysoev wrote:

> On Wed, Jan 28, 2009 at 01:19:59PM +0000, Valery Kholodkov wrote:
> 
> > 
> > "Igor Sysoev" <is@xxxxxxxxxxxxx> wrote:
> > 
> > > SSI-фильтру не нужно иметь тело запроса. SSI-фильтру нужно просто
> > > вызвать
> > > подзапрос, а уже этот подзапрос, если он обрабатывается
> > > proxy/fastcgi,
> > > сам прочитает тело.
> > 
> > Это будет работать, если параллельные подзапросы смогут координировать 
> > прием тела между собой. В противном случае все подзапросы унаследуют пустое 
> > тело и только один его прочитает. В данный момент ни подзапросы не 
> > координируют прием тела, ни статический хэндлер не откладывает отброс тела.
> 
> Приём тела сейчас должен координироваться (не проверял), потому что из
> всех параллельных подзапросов с клиентом может работать только один -
> если бы этого не было, то в выводе была бы мешанина.
> 
> Единственная на данный момент проблема - тело достаётся только
> первому подзапросу, прочитавшему тело. Решается хранением тела в основном
> запросе.
> 
> > Хотя идея хорошая, будет потребляться меньше ресурсов.
> > 
> > > > > В смысле - фаза приёма тела вызывается после контентной ?
> > > > 
> > > > Да.
> > > 
> > > Это сути не отличается от того, что я хотел сделать - откладывать
> > > дискард
> > > тела до последнего, если тело не было прочитано. Вопрос лишь в том,
> > > когда
> > > собственно можно делать дискард.
> > 
> > Этот вопрос ставит под сомнение возможность элегантной реализации как 
> > таковой, поскольку узнать, что в теле нет ни одного post-подзапроса можно 
> > только после того, как SSI-фильтр полностью завершит обработку тела. 
> 
> О чём я, собственно, и написал в том письме.
> Придётся возвращаться к тому самому патчу.

Впрочем, у меня появились такие соображения:

1) GET и HEAD в статическом модуле сразу отбрасывают тело.

2) POST в статику ничего не делает с телом. Таким образом, тело или будет
   прочитано одним из подзапросов, или же не прочитано вообще.

По окончании любого запроса неиспользумое тело отбрасывается.
Как я уже говорил, это может привести к dead lock'у, если тело ответа
достаточно большое, а браузер не хочет его принимать, пока не передаст
свое, тоже достаточно большое, тело запроса. Однако, эта ситуация
может возникнуть только при неверном использовании сайта - при
больших POSTах в статические страницы, в которых нет SSI.

Таким образом, при корректных POSTах всё будет работать (*), а при
некорректных - просто отваливаться по таймауту.

*) dead lock может возникнуть, если перед первым SSI, который будет
читать тело запроса, будет много данных, которые не поместятся в
output_buffers + в ядерные TCP-буфера сервер и клиента.
Лечится увеличением output_buffers.


-- 
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.