Как веб-сервер Apache httpd взаимодействует с Perl, PHP или CGI, получает выходные данные и возвращает ответ? - PullRequest
1 голос
/ 01 августа 2011

От клиентского браузера до веб-сервера Apache httpd существует четко определенный протокол HTTP через TCP / IP (сокеты).Мне трудно понять, какой канал / протокол используется от веб-сервера Apache httpd до Perl, PHP или CGI?Это межпроцессное взаимодействие через сокеты, трубку, очередь сообщений или сигналы?Может ли кто-то пролить свет на то, что действительно происходит за кулисами?Это похоже на то, как если бы веб-сервер Apache httpd выполнял другую программу (Perl или PHP), записывал выходные данные и затем отправлял их в браузер клиента?

Из Linux Server Security :

Протокол CGI не определяет, как веб-сервер должен взаимодействовать с программой CGI.Было два основных решения:

Автономные программы CGI

Apache получает запрос CGI, открывает двусторонний канал к внешней программе, отправляет ему вход CGIданные и возвращает вывод программы клиенту.Как отдельный процесс, программа может аварийно завершить работу, не отключая веб-сервер.Недостатком является то, что запуск нового процесса относительно медленен.

Встроенные CGI-программы

Программа переписана в виде модуля Apache и требует затрат при запускетолько когда начинается процесс Apache.Это намного быстрее, чем внешняя программа, и имеет доступ к внутренним компонентам Apache и другим модулям.Самыми популярными модулями для CGI в Apache являются механизмы интерпретатора для Perl (mod_perl) и PHP (mod_php).

1 Ответ

6 голосов
/ 01 августа 2011

Связь с программами CGI осуществляется по двум каналам: простое перенаправление ввода-вывода (то есть STDIN и STDOUT) и переменные среды.

HTTP-сервер отправляет запрос в STDIN CGI.Он читает HTTP-ответ из STDOUT CGI и отправляет его (слегка измененный) в браузер клиента.Дополнительные данные сервера (например, размер запроса или некоторые параметры сервера) устанавливаются в параметры среды, которые обычно начинаются с HTTP _.

...