Волгоградский государственный университет
Опубликован: 02.03.2009 | Доступ: свободный | Студентов: 1518 / 187 | Оценка: 4.20 / 4.03 | Длительность: 16:55:00
Лекция 6:

Способы организации активных web-серверов

< Лекция 5 || Лекция 6: 123 || Лекция 7 >
Аннотация: Лекция посвящена способам организации активных web-серверов, формированию динамических документов HTML с помощью CGI, языкам Perl, PHP. Рассматриваются приложения ISAPI и их использование для формирования динамических документов. Рассказывается про среду ASP и ASP.NET.
Ключевые слова: CGI, common gateway interface, шлюз, gateway, консольное приложение, обмен данными, стандартный поток ввода, оперативная память, html-форма, стандартный поток вывода, стандартный ввод, переменная среды, QUERY_STRING, реальное значение, декодирование, язык высокого уровня, Windows NT, последовательность операторов, CGI-скрипт, hypertext, preprocessor, препроцессор гипертекста, серверное приложение, пользовательский агент, PHP3, кроссплатформенность, сервер, Internet, information, server, ISAPI, DLL, производительность, масштабируемость, запуск процесса, internet server, адресное пространство процесса, системный ресурс, программирование приложений, адресное пространство, шифрование данных, аутентификация пользователя, статистическая информация, MFC, foundation, class library, Active, ASP, веб-приложение, интерпретатор команд, интерпретация, HTML, COM, файл, пользователь, веб-сервер, сценарий, язык программирования, vbscript, JScript, программа, REXX, python, Windows, script, host, очередь, IIS, запрос, программирование, активный объект, Basic, edition, activex data object, ADO, net, промежуточный язык, MSIL, microsoft intermediate language, JIT, just-in-time compiler, Common Language Runtime, Visual Studio .Net, rapid application development, RAD, элементы управления HTML, инфраструктура, MS-NET, программная модель, копирование файлов, удаление файла, CIR, intermediate language, CLR, трансляция, FCL, x86, powerpc, Common Type System, CTS, CLS, освобождение ресурсов, средства разработки, управление проектом, SDK, delphi, enterprise, transition

Программы 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 работает на сервере как отдельный процесс. В рамках этого процесса она способна, в частности, обращаться к базам данных для выборки или обновления информации.

Формирование динамических документов HTML с помощью CGI

увеличить изображение
Рис. 6.1. Формирование динамических документов HTML с помощью CGI

Последовательность работы CGI состоит из следующих этапов:

  1. Получение Web-сервером информации от клиента-браузера. Для передачи данных Web-серверу используются формы. Форма задается в HTML-документе при помощи тэгов <form> … </form> и состоит из набора полей ввода, отображаемых браузером в виде графических элементов управления: селекторных кнопок, опций, строк ввода текста, управляющих кнопок и т. д. Обычно одна из кнопок предназначена для завершения ввода. Когда пользователь заполнит всю форму, он нажимает эту кнопку, и данные из полей формы передаются программе CGI.
  2. Анализ и обработка полученной информации. Данные, извлеченные из HTML-формы, передаются для обработки CGI-программе. Они не всегда могут быть обработаны CGI-программой самостоятельно. Например, они могут содержать запрос к базе данных. В этом случае CGI-программа на основании полученной информации формирует запрос к ядру СУБД, выполняющейся на том же или удаленном компьютере.
  3. Создание нового HTML-документа и пересылка его браузеру. После обработки полученной информации CGI-программа создает динамический (виртуальный) HTML-документ, или формирует ссылку на уже существующий документ и передает результат браузеру.

CGI программа, имеет свою специфику, заключающуюся в том, что она, как правило, генерирует HTML-документ, посылаемый клиенту в виде ответа сервера. Ответ сервера, так же как и запрос клиента, имеет определенную структуру. Он состоит из следующих трех частей:

  1. Строка состояния, содержащая три поля: номер версии протокола HTTP, код состояния и краткое описание состояния, например:
    НТТР/1.0 200 ОК            # Запрос клиента обработан успешно
    НТТР/1.0 404 Not Found     # Документ по указанному адресу не существует
  2. Заголовки ответа, содержащие информацию о сервере и о возвращаемом HTML-документе, например:
    Date: Mon, 26 Jul 1999 18:37:07 GMT     # Текущая дата и время
    Server: Apache/1.3.6                    # Имя и номер версии сервера
    Content-type: text/html                 # Описывает медиа-тип содержимого
  3. Содержимое ответа — HTML-документ, являющийся результатом выполнения CGI-программы.

CGI-программа передает результат своей работы — HTML-документ — серверу, который возвращает его клиенту. Шлюз осуществляет свой вывод в стандартный поток вывода. Этот вывод может представлять собой или документ, сгенерированный шлюзом, или инструкции серверу, где получить необходимый документ. При этом сервер не анализирует и не изменяет полученные данные, он может только дополнять их некоторыми заголовками, содержащими общую информацию (например, текущая дата и время) и информацию о самом себе (например, имя и версия сервера).

В зависимости от метода данные формы передаются в CGI-программу или через стандартный ввод ( POST ), или через переменную среды QUERY_STRING ( GET ). Помимо этих данных CGI-программе доступна и другая информация, поступившая от клиента в заголовках запроса или предоставленная Web-сервером.

Информация шлюзам передается в следующей форме:

имя=значение&имя1=значение1&..,

где имя- имя переменной (из оператора FORM, например), и значение - ее реальное значение. В зависимости от метода, который используется для запроса, эта строка появляется или как часть URL (в случае метода GET ), или как содержимое HTTP запроса (метод POST ). В последнем случае, эта информация будет послана шлюзу в стандартный поток ввода.

Данные формы поступают в CGI-программу в закодированном виде, поэтому в качестве первого шага обработки CGI-сценарий должен выполнить декодирование полученной информации.

Таким образом, декодирование данных сводится к следующей последовательности манипуляций со строкой:

  1. замена каждой группы %hh, состоящей из шестнадцатеричного ASCII-кода hh с префиксом %, на соответствующий ASCII-символ;
  2. замена символов + пробелами;
  3. выделение отдельных пар имя=значение, разделенных ограничителем & ;
  4. выделение из каждой пары имя— значение имени и значения соответствующего поля формы.

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 непригоден для использования в сложных проектах. Это связано со следующими особенностями:

  1. падение производительности при обработке больших скриптов;
  2. PHP – интерпретируемый язык и уступает по скорости работы компилируемым технологиям;
  3. в php3 нет поддержки сессий, как, например, в ASP.
< Лекция 5 || Лекция 6: 123 || Лекция 7 >