CGI::Fast && $ENV{HTTP_*}

Igor Sysoev is at rambler-co.ru
Wed Jul 30 17:56:28 MSD 2008


On Wed, Jul 30, 2008 at 05:12:28PM +0500, Peter Vereshagin wrote:

> Hello,
> 
> nginx-0.5.35.
> 
> Пользую FCGI::ProcManager. Обнаружил, что CGI.pm работает неправильно, привязал CGI::Fast.
> Переменные из GET берёт хорошо, а из POST --- нет.
> Порылся в исходниках FCGI, и понял, что POST обрабатывается в CGI.pm.
> Собственно проблема с nginx в том, что я ему пишу в конфиге
> ===
>         fastcgi_param  CONTENT_TYPE     $content_type;
>         fastcgi_param  CONTENT_LENGTH   $content_length;
> ===
> а переменные в FCGI::ProcManager попадают в %ENV:
> ===
>         HTTP_CONTENT_TYPE
>         HTTP_CONTENT_LENGTH
> ===
> 
> остальные прописанные в конфиге --- идут как есть. И действительно, вот я вставляю в мой FCGI::Spawn:
> ===
> map { $ENV{ $_ } = $ENV{ "HTTP_$_" } } qw/CONTENT_LENGTH CONTENT_TYPE/
>       if $ENV{ 'REQUEST_METHOD' } eq 'POST';
> ===
> 
> перед "new CGI::Fast" --- и переменные им берутся как надо.
> 
> Вопрос в чём: я всё оставляю как сейчас, или это бага nginx? а то мы спецификаций да сишных исходников не читатели, только почитатели-причитатели :)

nginx передаёт указанные CONTENT_TYPE и CONTENT_LENGTH.
Кроме того, есть ещё HTTP_CONTENT_TYPE и HTTP_CONTENT_LENGTH из запроса
клиента, которые тоже передаются.


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





More information about the nginx-ru mailing list