Важно понимать, что CGI является стандартным определением how an information server passes data to a separate program.
The Common Interface Gateway (CGI) является простой интерфейс для запуска внешних программ, программного обеспечения или шлюзов под информационным сервером платформо-независимым способом. В настоящее время поддерживаемые информационные серверы
являются серверами HTTP.
Интерфейс был в использовании в World-Wide Web с 1993 года Эта спецификация определяет интерфейс, известный как (TM) системы AmigaDOS `CGI/1.1' , и его использование
на Unix (R) и ,
В стандартной модели, веб-сервер запускает внешнюю программу каждый раз, когда он нуждается один, маршалы данные в стандартный формат и передает его в программу [или как часть окружающей среды, или через внешний програмы Стандартный вход, в зависимости от метода HTTP (GET, POST и т. Д.). Программа обрабатывает данные, возвращает данные, печатая заголовки и содержимое в стандартный вывод, а затем завершает работу.
Основным недостатком CGI всегда был счет запуска внешней программы при каждом вызове. В Unix для этого требуется, чтобы веб-сервер создавал собственную копию в памяти (fork), а затем внешнюю программу накладывал на копию (exec). Цикл fork/exec является дорогостоящим с точки зрения вычислительной мощности, особенно когда вы говорите о большом процессе Apache (объем памяти с несколькими МБ), наложенный на Perl-интерпретатор, который затем должен анализировать программу Perl до ее запуска.
Чтобы удалить цикл fork/exec из уравнения, было разработано несколько новых вещей. Mod_perl внедряет интерпретатор Perl в процесс apache, удаляя необходимость fork/exec при каждом вызове, а также разрешает кэширование анализируемых perl-программ. Числа, о которых сообщают различные организации, увеличивают пропускную способность в любом месте в 20-100 раз больше, чем CGI.
Второй способ, называемый FastCGI, также был разработан примерно в то же время. В FastCGI запускается внешняя программа (часто контейнер или сервер приложений) одновременно с запуском HTTP-сервера, а HTTP-сервер запрашивает запросы к процессу FastCGI.Эта модель обеспечивает те же преимущества при удалении цикла fork/exec, и имеет набор плюсов/минусов, которые отличаются от mod_perl.
В конце концов, CGI/FastCGI/mod_perl, в зависимости от того, что вы выбрали, ваша программа должна была понять, как получить данные, переданные ей веб-сервером, и это суть проблемы, почти каждый пост-CGI технология определяет его собственный способ передачи данных в/из программы (GI в PSGI по-прежнему stanbds для интерфейса Gateway), но предоставляет адаптер для преобразования его предпочтительного пути в модель CGI, чтобы упростить принятие.
Я не уверен, ответил ли я на ваш вопрос вообще, но спасибо, что попросил его. Мне понравилось писать этот ответ ;-)
Catalyst поддерживает FastCGI прозрачно. – ikegami