Как
Web-сервер обрабатывает данные пользователя
Итак,
каким же образом программа Web-сервера обрабатывает данные, отправленные ей
пользователем?
Да
никак. Web-сервер не приспособлен их обрабатывать. Его задача: прием от Web-обозревателя
запроса на файлы (Web-страницы, таблицы стилей, графические изображения, фильмы,
звуки, архивы, исполняемые файлы и т. п.), поиск этих самых файлов на жестких
дисках серверного компьютера и отправка найденных файлов назад Web-обозревателю.
Это его основная задача. Конечно, некоторые особо мощные серверы могут выполнять
дополнительные действия над отправляемыми файлами перед собственно их отправкой
(в частности, выполнять серверные директивы). Есть и программы-"многостаночники",
выполняющие функции не только Web-сервера, но и сервера FTP, почты, новостей
UseNet и бог знает чего еще. Но основная функция: простая выдача файлов по требованиям
клиентов -и не более того.
Секрет
в том, что данные посетителя обрабатываются не самим Web-сервером. Для этого
применяются специальные программы, работающие вместе с Web-сервером на том же
серверном компьютере. Они называются серверными программами, не имеют интерфейса
пользователя и "общаются" только с Web-сервером, принимают от него
введенные пользователем данные и возвращают ему результат. Этим они коренным
образом отличаются от клиентских программ, работающих непосредственно с пользователем.
(К клиентским программам относится, в частности, ваш любимый Web-обозреватель.)
Из
этого следует, что Web-сервер умеет-таки принять данные от пользователя. Да,
это входит в его основную задачу: принять данные и перенаправить их серверной
программе. В свою очередь серверная программа их обработает и вернет Web-серверу
результат.
Вот
тут-то и начинается самое интересное. Дело в том, что результат, возвращаемый
серверной программой Web-серверу, — это не что иное, как обычный HTML-код! Фактически
серверная программа возвращает готовую Web-страницу, сформированную на основе
данных, введенных посетителем. Такая страница называется динамической, в отличие
от статических страниц, написанных Web-дизайнером и сохраненных в файлах на
дисках серверного компьютера. А уж эту динамическую страницу Web-сервер и направляет
клиенту в качестве ответа на введенные данные.
Серверные
программы делятся на следующие четыре вида.
Теперь
рассмотрим все это разнообразие подробнее.
CGI-программы
представляют собой обычные исполняемые файлы, написанные на любом языке программирования
и откомпилированные в машинный код процессора. Они не имеют интерфейса пользователя
(как и все серверные программы), а работают с Web-сервером, получают от него
входные данные и ему же пересылают результаты своей работы. Запускаются они
самим Web-сервером, когда в них возникает нужда (когда необходимо обработать
полученные от пользователя данные), и работают под управлением операционной
системы серверного компьютера. При этом, если Web-серверу поступает одновременно
несколько запросов на обработку данных от пользователей, он запускает соответствующее
количество копий CGI-программы.
К
достоинствам CGI-программ можно отнести легкость создания (многие среды разработки
программ поддерживают создание таких приложений, в частности популярнейший Borland
Delphi, начиная с версии 3) и простоту отладки. Также, поскольку CGI-приложения
представляют собой независимые программы, они выполняются отдельно от Web-сервера
(как говорят программисты и системные администраторы, выполняются в другом адресном
пространстве). Это значит, что при сбое в CGI-программе завершается только она
— сам Web-сервер остается "на плаву". А недостаток у CGI-программ
всего один: большой расход системных ресурсов, поскольку для обработки каждого
набора данных запускается отдельная копия серверной программы. И если Web-серверу
поступит слишком много запросов на обработку данных, серверный компьютер может
и зависнуть.
Расширения
Web-сервера — более новая разновидность серверных программ. Они представляют
собой обычные библиотеки DLL, в которых реализована вся логика серверной программы.
Такие библиотеки как бы встраиваются в программу Web-сервера и работают как
ее неотъемлемая часть. Поскольку библиотеки DLL работают только в среде Windows,
для того чтобы создавать расширения в иных операционных системах, были придуманы
и другие форматы. В частности, модули расширения сервера Apache не являются
библиотеками DLL,
Именно
в виде библиотек DLL создаются расширения Web-серверов Internet Information
Server фирмы Microsoft и Netscape Web Server фирмы Netscape. В первом случае
расширения имеют формат ISAPI (Internet Server Application Programming Interface
— интерфейс программирования приложений интернет-сервера), а во втором — NSAPI
(Netscape Server Application Programming Interface — интерфейс программирования
приложений сервер^ Netscape). Формат модулей расширения Apache так и называется
— модули Apache.
Достоинство у расширений Web-сервера одно: бережный расход системных ресурсов. Дело в том, что для обработки всех наборов данных пользователя запускается всего один экземпляр расширения, который отнимает существенно меньше ресурсов, чем уйма запущенных CGI-программ. Однако расширения труднее создавать и отлаживать, к тому же они не так безопасны.
Как
CGI-программы. Поскольку они работают как часть Web-сервера, любая ошибка в
расширении приведет к зависанию сервера.
Оба
описанных выше вида серверных программ обладают одним огромным недостатком.
Прежде чем они смогут работать, они должны быть написаны на языке программирования
и откомпилированы в машинные коды процессора, что отнимает много времени, особенно
при отладке. Конечно, откомпилированные программы работают быстрее интерпретируемых,
т. е. тех, где каждая инструкция читается, расшифровывается и обрабатывается
специальной программой-интерпретатором. Но у интерпретируемых программ есть
и свои преимущества, главными из которых являются простота и быстрота написания.
Две следующие разновидности серверных программ, которые будут описаны, как раз
будут интерпретируемыми.
Как
уже говорилось, активные серверные страницы — это обычные Web-страницы, включающие
в себя особые серверные сценарии, выполняемые самим Web-сервером или специальной
серверной программой (CGI-приложением или расширением Web-сервера). В частности,
ASP (Active Server Pages — активные серверные страницы), поддерживаемые Microsoft
Internet Information Server, и JSP (Java Server Pages — серверные страницы,
написанные на JavaScript), поддерживаемые рядом других Web-серверов, работают
именно таким образом. Серверные страницы ASP пишутся на языках JavaScript и
VBScript, a JSP — только на JavaScript.
Достоинства
активных серверных страниц вы уже знаете: легкость и быстрота написания и простота
отладки. Кроме того, поскольку активные серверные страницы -- это обычные Web-страницы
с "вкраплениями" программного кода, их написание легко освоят все,
кто знаком с HTML. Недостаток: относительная медлительность и повышенные требования
к системным ресурсам.
Серверные
сценарии подобны активным серверным страницам тем, что являются интерпретируемыми,
однако представляют собой "чистый" программный код, без HTML-''примесей".
Интерпретатор практически всегда представляет собой CGI-программу, однако ничто
не мешает разработать его в виде расширения Web-сервера. Сценарии обычно пишутся
на языке программирования Perl, специально предназначенном для обработки текста;
также используются языки Python, JavaScript, VBScript и даже (как говорят) язык
командных файлов MS-DOS. Фактически писать сценарии можно на любом языке программирования,
для которого есть интерпретатор.
Достоинства
и недостатки серверных сценариев те же, что у активных серверных страниц. Однако
сценарии потребляют исключительно много системных ресурсов, даже больше, чем
CGI-приложения. Ведь для обработки каждого набора данных пользователя запускается
своя копия интерпретатора, а интерпретатор, в свою очередь, расходует много
ресурсов на обработку сценария. И все же, несмотря на это, сценарии — самый
популярный способ создания серверных программ.
В
табл. 15.1 приведены расширения файлов серверных программ.
Таблица
15.1. Расширения файлов серверных программ
Вид
серверных программ |
Подвид |
Расширение |
||
CGI-программы |
— |
exe |
||
Расширения
Web-сервера |
ISAPI
и NSAPI Модули Apache |
dll
Нет расширения |
||
Активные
серверные страницы |
ASP
JSP |
asp
jsp |
||
Язык
Perl JavaScript VBScript Другие языки |
pl,
cgi js, cgi vbs, cgi cgi |
|||
Вот мы и рассмотрели, как Web-сервер обрабатывает (точнее, не обрабатывает) данные пользователя. Теперь переместимся в начало цепочки и рассмотрим, как Web-обозреватель отправляет данные пользователя серверной программе.