Способы организации активных web-серверов
Программы CGI
CGI-интерфейс
CGI-интерфейс (Common Gateway Interface – Общий шлюзовой интерфейс) — одно из первых решений, созданных для доставки динамической web-информации. CGI он до сих пор очень популярен на платформе UNIX. CGI-приложения — это программы, исполняемые на Web-сервере и обычно используемые для предоставления динамической Web-информации.
Аббревиатура CGI (Common Gateway Interface) обозначает часть Web-сервера, которая может взаимодействовать с другими программами, выполняющимися на этом же Web-узле, и в этом смысле является шлюзом (gateway - шлюз) для передачи данных, полученных от клиента, программам обработки, таким как СУБД, электронные таблицы, и др. CGI включает общую среду (набор переменных) и протоколы для взаимодействия с этими программами. Программы CGI пользуются этим интерфейсом для получения (через протокол HTTP) информации от пользователя, для ее обработки и отправки обратно в виде нового документа HTML, ссылки на существующий документ или на другой объект.
Программа CGI
Программа CGI это обычное консольное приложение, работающее в среде операционной системы сервера Web и осуществляющее обмен данными через стандартные потоки ввода и вывода. Такое приложение загружается в оперативную память сервера и запускается только по явному запросу пользователя, когда к нему выполняется обращение из документа HTML. Окончив обработку запроса пользователя, программа CGI завершает свою работу и выгружается из памяти сервера.
Программа CGI работает на сервере как отдельный процесс. В рамках этого процесса она способна, в частности, обращаться к базам данных для выборки или обновления информации.
Последовательность работы CGI состоит из следующих этапов:
- Получение Web-сервером информации от клиента-браузера. Для передачи данных Web-серверу используются формы. Форма задается в HTML-документе при помощи тэгов <form> … </form> и состоит из набора полей ввода, отображаемых браузером в виде графических элементов управления: селекторных кнопок, опций, строк ввода текста, управляющих кнопок и т. д. Обычно одна из кнопок предназначена для завершения ввода. Когда пользователь заполнит всю форму, он нажимает эту кнопку, и данные из полей формы передаются программе CGI.
- Анализ и обработка полученной информации. Данные, извлеченные из HTML-формы, передаются для обработки CGI-программе. Они не всегда могут быть обработаны CGI-программой самостоятельно. Например, они могут содержать запрос к базе данных. В этом случае CGI-программа на основании полученной информации формирует запрос к ядру СУБД, выполняющейся на том же или удаленном компьютере.
- Создание нового HTML-документа и пересылка его браузеру. После обработки полученной информации CGI-программа создает динамический (виртуальный) HTML-документ, или формирует ссылку на уже существующий документ и передает результат браузеру.
CGI программа, имеет свою специфику, заключающуюся в том, что она, как правило, генерирует HTML-документ, посылаемый клиенту в виде ответа сервера. Ответ сервера, так же как и запрос клиента, имеет определенную структуру. Он состоит из следующих трех частей:
- Строка состояния, содержащая три поля: номер версии протокола HTTP, код состояния и краткое описание состояния, например:
НТТР/1.0 200 ОК # Запрос клиента обработан успешно НТТР/1.0 404 Not Found # Документ по указанному адресу не существует
- Заголовки ответа, содержащие информацию о сервере и о возвращаемом HTML-документе, например:
Date: Mon, 26 Jul 1999 18:37:07 GMT # Текущая дата и время Server: Apache/1.3.6 # Имя и номер версии сервера Content-type: text/html # Описывает медиа-тип содержимого
- Содержимое ответа — HTML-документ, являющийся результатом выполнения CGI-программы.
CGI-программа передает результат своей работы — HTML-документ — серверу, который возвращает его клиенту. Шлюз осуществляет свой вывод в стандартный поток вывода. Этот вывод может представлять собой или документ, сгенерированный шлюзом, или инструкции серверу, где получить необходимый документ. При этом сервер не анализирует и не изменяет полученные данные, он может только дополнять их некоторыми заголовками, содержащими общую информацию (например, текущая дата и время) и информацию о самом себе (например, имя и версия сервера).
В зависимости от метода данные формы передаются в CGI-программу или через стандартный ввод ( POST ), или через переменную среды QUERY_STRING ( GET ). Помимо этих данных CGI-программе доступна и другая информация, поступившая от клиента в заголовках запроса или предоставленная Web-сервером.
Информация шлюзам передается в следующей форме:
имя=значение&имя1=значение1&..,
где имя- имя переменной (из оператора FORM, например), и значение - ее реальное значение. В зависимости от метода, который используется для запроса, эта строка появляется или как часть URL (в случае метода GET ), или как содержимое HTTP запроса (метод POST ). В последнем случае, эта информация будет послана шлюзу в стандартный поток ввода.
Данные формы поступают в CGI-программу в закодированном виде, поэтому в качестве первого шага обработки CGI-сценарий должен выполнить декодирование полученной информации.
Таким образом, декодирование данных сводится к следующей последовательности манипуляций со строкой:
- замена каждой группы %hh, состоящей из шестнадцатеричного ASCII-кода hh с префиксом %, на соответствующий ASCII-символ;
- замена символов + пробелами;
- выделение отдельных пар имя=значение, разделенных ограничителем & ;
- выделение из каждой пары имя— значение имени и значения соответствующего поля формы.
Perl
CGI-программа может быть написана на любом языке программирования, имеющем средства обмена данными между программами.
Для создания абсолютно мобильных программ CGI лучше всего воспользоваться языком Perl. Интерпретаторы этого языка созданы практически для всех операционных систем. Этот язык высокого уровня содержит многие функции, упрощающие создание программ CGI. В сети Internet доступны (причем бесплатно) версии интерпретатора Perl для различных платформ (в том числе и для Microsoft Windows NT), разнообразная документация и примеры программ.
Программа на языке Perl представляет собой последовательность операторов, которые интерпретатор языка выполняет при каждом запуске без преобразования исходного текста программы в выполняемый двоичный код. По этой причине CGI-программы называют также CGI-сценариями или CGI-скриптами.
PHP
Для динамического формирования документов HTML используется также технология PHP (Hypertext Preprocessor). PHP часто еще называют препроцессором гипертекста (Hypertext Preprocessor). По сути PHP серверный (выполняющийся на стороне сервера) мультиплатформный язык описания сценариев, встраиваемый непосредственно в HTML-код.
Основными сферами применения данной технологии являются создание серверных приложений и интерфейсов к базам данных.
Приложения PHP встраиваются в документы HTML в качестве сценариев, подобно сценариям JavaScript, однако, в отличие от JavaScript, сценарии PHP выполняются не пользовательским агентом, а специальной программой – проигрывателем сценариев PHP, которая является приложением CGI и запускается сервером. Пользовательский агент получает результат выполнения запрошенного им сценария и не может получить доступ к исходному коду самого сценария.
До того, как сервер пересылает опубликованный файл браузеру, его просматривает препроцессор-интерпретатор. Для этого файлы имеют специальное расширение .phtml или php3. Если страница содержит помимо HTML php-код, то он выполняется и результат отправляется браузеру.
Преимуществами PHP является бесплатность и кроссплатформенность. Недостаток – плохая масштабируемость. PHP непригоден для использования в сложных проектах. Это связано со следующими особенностями: