Как Web - сервер обрабатывает данные пользователя
Итак, каким же образом программа Web -сервера обрабатывает данные, отправленные ей пользователем?
Да никак. Web -сервер не приспособлен их обрабатывать. Его задача: прием от Web -обозревателя запроса на файлы ( Web -страницы, таблицы стилей, графические изображения, фильмы, звуки, архивы, исполняемые файлы и т. п.), поиск этих самых файлов на жестких дисках серверного компьютера и отправка найденных файлов назад Web -обозревателю. Это его! основная задача. Конечно, некоторые особо мощные серверы могут выполнять дополнительные действия над отправляемыми файлами перед собственно их отправкой (в частности, выполнять серверные директивы). Есть и программы-"многостаночники", выполняющие функции не только Web -сервера, но и сервера FTP , почты, новостей UseNet и бог знает чего еще Но основная функция: простая выдача файлов по требованиям клиентов и не более того.
Секрет в том, что данные посетителя обрабатываются не самим Web - сервером. Для этого применяются специальные программы, работающие вместе с Web -сервером на том же серверном компьютере. Они называются серверными программами, не имеют интерфейса пользователя и "общаются" только с Web -сервером, принимают от него введенные пользователем данные и возвращают ему результат. Этим они коренным образом отличаются от клиентских программ, работающих непосредственно с пользователем. (К клиентским программам относится, в частности, ваш любимый Web -обозреватель.)
Из этого следует, что Web -сервер умееттаки принять данные от пользователя. Да, это входит в его основную задачу: принять данные и перенаправить их серверной программе. В свою очередь серверная программа их обработает и вернет Web -серверу результат.
Вот тутто и начинается самое интересное. Дело в том, что результат, возвращаемый серверной программой Web -серверу, — это не что иное, как обычный HTML -код! Фактически серверная программа возвращает готовую Web -страницу, сформированную на основе данных, введенных посетителем. Такая страница называется динамической, в отличие от статических страниц, написанных Web -дизайнером и сохраненных в файлах на дисках серверного компьютера. А уж эту динамическую страницу Web -сервер и направляет клиенту в качестве ответа на введенные данные.
Серверные программы делятся на следующие четыре вида.
1. Исполняемые программы, работающие через интерфейс CGI ( Common Gateway Interface — общий интерфейс обмена), так называемые CGI - npoграммы. Эта разновидность серверных программ — самая старая, однако отнюдь не устаревшая.
2. Расширения Web -сервера (приложения формата ISAPI , NSAPI , модули расширения Apache и т. п.). Новый способ, позволяющий встраивать серверные программы в сам Web -сервер, делая их его составными частями. Впервые предложен фирмой Microsoft для их сервера Microsoft Internet Information Server интерфейс ISAPI и разработчиками популярного бесплатного Web -сервера Apache .
3. Активные серверные страницы ( ASP , JSP и др.). Фактически это обычные статические Web -страницы, сохраненные в файлах, которые,, кроме обычного HTML -кода, включают в себя команды, обрабатываемые либо самим Web -сервером, либо его расширением. Также новый способ, впервые предложенный Microsoft для того же Internet Information Server .
4. Серверные сценарии, написанные на интерпретируемом языке ( Perl , Python , VBScript , JavaScript и др.). Обычные сценарии, работающие через интерфейс CGI или ISAPI на стороне сервера.
Теперь рассмотрим все это разнообразие подробнее.
CGI -программы представляют собой обычные исполняемые файлы, написанные на любом языке программирования и откомпилированные в ма шинный код процессора. Они не имеют интерфейса пользователя (как и все серверные программы), а работают с Web -сервером, получают от него входные данные и ему же пересылают результаты своей работы. Запускаются! они самим Web -сервером, когда в них возникает нужда (когда необходимо обработать полученные от пользователя данные), и работают под управлением операционной системы серверного компьютера. При этом, если Web -серверу поступает одновременно несколько запросов на обработку данных от пользователей, он запускает соответствующее количество копий CGI - J программы.
К достоинствам CGI -программ можно отнести легкость создания (многие! среды разработки программ поддерживают создание таких приложений,( в частности популярнейший Borland Delphi , начиная с версии 3) и просто отладки. Также, поскольку CGI -приложения представляют собой независимые программы, они выполняются отдельно от Web -сервера (как говорят программисты и системные администраторы, выполняются в другом адресном пространстве). Это значит, что при сбое в CGI -программе завершаем только она — сам Web -сервер остается "на плаву". А недостаток у CGI -программ всего один: большой расход системных ресурсов, поскольку для обработки каждого набора данных запускается отдельная копия серверной программы. И если Web -серверу поступит слишком много запросов на работку данных, серверный компьютер может и зависнуть.
Расширения Web -сервера — более новая разновидность серверных программ. Они представляют собой обычные библиотеки DLL , в которых реализована вся логика серверной программы. Такие библиотеки как встраиваются в программу Web -сервера и работают как ее неотъемлема часть. Поскольку библиотеки DLL работают только в среде Windows , для того чтобы создавать расширения в иных операционных системах, были придуманы и другие форматы. В частности, модули расширения Apache не являются библиотеками DLL .
Именно в виде библиотек DLL создаются расширения Web - c ерверов 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 приведены расширения файлов серверных программ.
Вот мы и рассмотрели, как Web -сервер обрабатывает (точнее, не обрабатывает) данные пользователя. Теперь переместимся в начало цепочки и смотрим, как Web -обозреватель отправляет данные пользователя серверной программе.