"Дмитрий Леонов. Использование Perl в интернет-технологиях" - читать интересную книгу автора

application/x-www-form-urlencoded), а также длина строки. Сама строка в этом
случае передается непосредственно в теле запроса (примеры приведены чуть
ниже). В заголовках запроса также передается значительное количество
вспомогательной информации: тип браузера, адрес страницы, с которой был
произведен запрос, и т. д. Вся эта информация передается в HTTP-заголовках,
имеющих вид "Имя: значение". Отделяются друг от друга заголовки с помощью
символа новой строки, завершается их список еще одним символов новой строки.
Сервер вызывает CGI-приложение, и в зависимости от метода запроса
передает информацию из формы через переменную окружения QUERY_STRING (в
случае GET) либо через стандартный ввод (в случае POST). Также формируются
другие переменные окружения, такие как HTTP_USER_AGENT, REMOTE_HOST и др.
Информация для 'njuj окружения берется из HTTP-заголовков.
CGI-приложение считывает строку с переданной информацией со
стандартного ввода (stdin) или из переменной окружения QUERY_STRING.
Обработав информацию, программа, как правило, либо переадресует браузер на
некоторый существующий документ с помощью http-заголовка Location, либо
формирует виртуальный документ, посылая информацию на стандартный вывод
(stdout). Телу документа предшествуют HTTP-заголовки, описывающие тип
возвращаемых данных, управляющие кэшированием, работой с cookies и т. д. Все
это передается серверу.
Сервер пересылает ответ CGI-приложения браузеру, дополняя их при
необходимости кодом возврата и вспомогательными заголовками. При этом
используется один из двух способов - перенаправление броузера на новый
адрес с помощью http-заголовка Location, либо формирование виртуального
документа. В последнем случае значение, переданное в заголовке Content-type,
используется броузером для интерпретации идущей следом информации -
например, text/html для виртуальных html-документов.
Браузер, основываясь на заголовках HTTP, интерпретирует ответ
CGI-приложения и выводит его для просмотра пользователем.
Реализовать CGI-приложение можно на любом языке, способном генерировать
код для серверной платформы или для которого доступен интерпретатор. Так,
простейшее CGI-приложение может быть реализовано на языке пакетных файлов
DOS, на Delphi, С/С++, Tcl, Visual Basic, AppleScript, FoxPro, Perl и т. д.
Основные недостатки классического CGI - каждое взаимодействие клиента
с сервером, во-первых, является независимым от предыдущих и последующих
взаимодействий, во-вторых, приводит к запуску на сервере отдельного
процесса. Первый недостаток является тяжелым наследием HTTP-протокола, не
имеющего гарантированно работающих средств идентификации клиентов, и все
существующие решения способны лишь слегка сгладить этот недостаток. Борьба
со вторым недостатком идет гораздо успешнее, и вполне приемлемые решения
существуют для обеих наиболее распространенных серверных платформ.
Для серверов, основанных на Unix-платформах, одним из самых популярных
решений является использование mod_perl - модуля, интегрирующего в
web-сервер Apache интерпретатор языка Perl. Это позволяет резко уменьшить
нагрузку на сервер при запуске CGI-приложений, написанных на Perl. И это
только верхняя часть айсберга - mod_perl позволяет разработчику писать на
Perl полноценные подключаемые модули Apache, что открывает перед
программистом довольно широкие возможности. Другим популярным решением
является PHP - скриптовый язык, встраиваемый непосредственно в тело
html-страницы. Перед тем, как отослать html-документ клиенту, сервер