2012-02-15 2 views
1

Мы используем CGI.pm, чтобы помочь нам обрабатывать загрузку файлов на нашем веб-сайте и через наш API, который используется нашими Android-приложениями &. Недавно мы заметили, что CGI.pm, кажется, не возвращает никаких параметров почти для 50% файлов, загружаемых через наше приложение для iPhone. Мы не видели подобной проблемы с этими файлами, загружаемыми через наш веб-сайт.Tricky Issue Обработка загрузки файлов в Perl

Мы не можем реплицировать проблему при тестировании, но в процессе производства cgi_error() метод CGI.pm не сообщает о каких-либо ошибках в тех случаях, когда отсутствуют параметры CGI.pm. Мы подтвердили, что приложение iPhone всегда включает правильные параметры при отправке файлов для загрузки.

Быстрый фон на настройку. У нас есть приложение delpoyed на серверах Amazon EC2, которые балансируют нагрузку с использованием балансировщика эластичной нагрузки Amazon. У нас также есть $ CGI :: POST_MAX = (1024 * 100000); поэтому максимальный размер POST установлен в 100 МБ, и мы подтвердили, что все загрузки находятся под этим лимитом.

Я не уверен, куда идти дальше. Любые идеи о том, что может быть проблемой, и как ее разрешить, очень понравятся. Также будут полезны любые идеи о том, как определить корень проблемы, чтобы мы могли начать поиск и устранение неисправностей.

Заранее благодарим за вашу помощь!

+0

Можете ли вы уточнить свой смысл, когда говорите, что CGI.pm не возвращает никаких параметров для 50% загруженных файлов? Являются ли эти параметры ДРУГИМИ, чем данные файла отсутствуют, или что нет простых данных, доступных для CGI.pm? В журнале ошибок отображается неверное для этих запросов? – kbenson

+0

Абсолютно никаких параметров, возвращаемых CGI.pm, даже если мы подтвердили, что все параметры отправлены корректно iPhone App. Журнал ошибок ничего не сообщает и не является методом cgi_error(), поэтому мы так застряли. –

+0

Это 100 МБ до или после многократного кодирования MIME? – daxim

ответ

1

Потеря параметров без регистрации ошибок - это именно тот признак модуля CGI, который сталкивается с ошибкой обработки данных POST, например POST, превышающей $ CGI :: POST_MAX. Используете ли вы CGI.pm в функциональном режиме, вызывая param() или объектно-ориентированный режим, вызывающий $ cgi-> param()? Что касается cgi_error(), pergoc CGI предупреждает: При использовании функционально-ориентированного интерфейса ошибки могут возникать только при первом вызове param(). Будьте готовы к этому!

Что касается отладки, если вы подозреваете, CGI.pm маскирует ошибки от вас, попробуйте посмотреть на объект CGI, прежде чем делать что-нибудь еще:

use Data::Dumper; 
my $cgi = CGI->new(); 
warn Dumper($cgi); 

В дамп объекта CGI вы видите error: '.cgi_error' => '413 Request entity too large' - это то, что cgi_error() вернет для POST_MAX.

Кроме того, если вы используете Modperl, имейте в виду, что CGI может быть старым для таких значений, как $ CGI :: POST_MAX между запросами в разных приложениях. (Но, поскольку вы указываете POST_MAX в своем, это не будет вашей проблемой.)

0

Мы тоже видим это же поведение с CGI.pm, хотя мы думали, что проблема была ограничена только IE. Решено путем добавления $CGI::POST_MAX=5000000. Over kill, так как это всего лишь файл 50k, который передается назад и для.

Смежные вопросы