Архитектура Web-приложений с модулями расширения сервера (рис. 19.3) может включать в себя стандартные модули расширения — DLL-библиотеки, реализующие, например, технологии ASP, IDC/HTX, объекты ActiveX и пр. Кроме того, допускается подключение дополнительных модулей, разработанных с использованием интерфейсов CGI, ISAPI и др.
В этом случае в функции Web-сервера входят обработка запросов Web-обозревателей пользователей сети, вызов (загрузка) соответствующего модуля расширения сервера и передача ему параметров запроса. В результате обработки запроса модулями расширения сервера формируется Web-документ с использованием различных HTML-шаблонов. Готовый Web-документ Web-сервера отсылается обратно Web-обозревателю в формате протокола HTTP.
Как отмечалось, различают пассивное и активное состояние Web-сервера. Так, Web-сервер находится в пассивном состоянии, если формируемый им документ содержит статическую информацию, т. е. на Web-странице отсутствуют средства ввода и обработки запросов к серверу.
512
Часть IV. Базы данных и Интернет
Если Web-документ динамически создается в ответ на запрос пользователя (рис. 19.3) или если в обозреватель загружены различные интерактивные визуальные элементы управления, то сервер является активным. Для публикации БД интерес представляет активный Web-сервер, реализуемый с помощью модулей расширения.
Для создания модулей расширения Web-сервера используются интерфейсы CGI, WinCGI или API.
Интерфейс СС/является стандартным протоколом взаимодействия между Web-сервером и модулями расширения, которые могут применяться для выполнения дополнительных функций, не поддерживаемых сервером. Напомним, что интерфейсу CGI соответствуют обычные консольные приложения операционной системы DOS. Для написания CGI-программ подходит практически любой язык программирования, обеспечивающий доступ к переменным среды и ввод/вывод через стандартные потоки STDIN и STDOUT. В частности, для написания CGI-программ подходит среда Delphi.
|
Для запуска CGI-модуля обозреватель должен сформировать запрос к серверу с указанием адреса URL этого модуля. Это можно сделать следующими способами:
□ задать URL модуля CGI в адресной строке обозревателя;
□ послать серверу запрос на выполнение CGI-модуля путем выбора ссылки, атрибут href которой содержит адрес этого модуля;
□ нажать в форме кнопку типа Submit, у которой атрибут Action содержит URL-адрес CGI-модуля.
Глава 19. Web-приложения и интерфейсы
513
После передачи запроса обозревателя CGI-приложению сервер передает ему также данные из командной строки запроса. CGI-приложение формирует ответ и помещает его в выходной поток (на стандартном устройстве вывода), затем сервер посылает этот ответ с использованием протокола HTTP обратно обозревателю.
В случае параллельной обработки нескольких запросов сервер запускает отдельный процесс для каждого запроса, причем для каждого процесса создается копия модуля расширения в памяти компьютера, на котором находится Web-сервер. При большом размере исполняемого CGI-файла сильно увеличивается время отклика сервера на запрос обозревателя, поскольку потребуется время для загрузки модуля CGI с диска в память. Причем, если CGI-программа является интерпретируемой (например, написана на языке РНР или Perl), она будет выполняться еще медленнее, т. к. в этом случае, кроме загрузки модуля CGI, загружается интерпретатор, производится интерпретация команд. При наличии сотен или тысяч обращений к серверу произойдет запуск сотен или тысяч CGI-программ, каждая из которых будет обрабатывать соответствующий запрос.
|
В некоторых операционных системах, в частности, в UNIX, могут повторно использоваться уже загруженные программные коды модуля CGI первого процесса с созданием для каждого нового обращения только своего экземпляра данных.
Интерфейс WinCGI (протокол) отличается от интерфейса CGI тем, что управляющие параметры передаются через INI-файл, а входной и выходной потоки данных перенаправлены в специальные файлы. Этот интерфейс является реализацией интерфейса CGI для операционной системы Windows 3.1.
Более перспективными интерфейсами для разработки дополнительных модулей расширения Web-сервера являются интерфейсы ISAPI/NSAPI. При использовании этих интерфейсов модули расширения реализуются в виде библиотек DLL. Такой механизм обеспечивает экономию ресурсов сервера и увеличение скорости обработки запросов.
Интерфейс ISAPI может применяться также для создания ISAPI-фильтров, которые, в отличие от модулей ISAPI, используются для контроля всего потока данных между сервером и обозревателем на уровне протокола HTTP. ISAPI-фильтры можно применять для динамической перекодировки, шифрования, сбора статистической информации о работе сервера.