, если о программах-клиентах сегодня не пишет только ленивый (Netscape и Mosaic, например, на слуху у каждого), то информации о серверах почти нет. Серверы это действительно то, без чего реально не может обойтись "паутина".

Продолжением цикла о WWW мог бы стать обзор существующих программ-клиентов с оценкой их достоинств и недостатков, тем более, что в предыдущей статье речь шла именно об архитектуре таких программ. Однако есть по крайней мере две причины, которые заставляют отложить такой обзор. Во-первых, 1995 год - это год стремительного изменения ситуации в области использования WWW-клиентов пользователями Internet. Если опросы 1994 года показывали, что Netscape занимает первое место среди программ-клиентов World Wide Web (45% от общего числа установок), а Mosaic хоть и отстает, но все-таки еще держится "на хвосте" у лидера (23% от общего числа установок), то к осени этого года программы интерфейсы корпорации Netscape Communication оставили далеко позади все остальные программные продукты и занимают теперь 83% от общего числа используемых в Internet программ данного типа. Эту цифру называют, в частности, опросы реальных пользователей Internet (Internet WWW Site Survey, http://www.mirai.com/survey). К слову сказать, программный продукт Microsoft занимает в этом списке только девятое место (0.63%), но входит в число трех продуктов, у которых наблюдается тенденция к росту количества инсталляций. Второй причиной, заставляющей повременить с оценкой программ-клиентов Web, является бурная персонализация WWW. Если в 1994 году 54% пользователей "паутины" сидели за Unix-компьютерами, то в 1995 году этот процент сократился до 20%, а преобладают теперь пользователи Windows (более 50%). Таким образом, какая бы там ни была оценка текущего состояния дел, она не станет основанием для принятия правильных решений: информация о реализации программ в Unix будет относительно бесполезной для пользователей Windows, а описание возможностей действующих программ не будет соответствовать тому, что можно получить уже на следующей неделе. Кроме того, Netscape объявила, что помимо защищенного режима работы своих клиентов с серверами WWW новые продукты будут поддерживать и мобильный код Java, разработанный компанией Sun, что позволит организовывать мультимедийные WWW-страницы (но вероятно, породит и новые проблемы с безопасностью). Таким образом, есть основания не делать каких-либо оценок относительно клиентской части WWW до конца года.

К счастью, World Wide Web - это не только программы-интерфейсы, но и средства разработки гипертекстовых страниц, специальный инструментарий навигации в сети, средства сбора статистики и, конечно, сердце системы - серверы. Сервер World Wide Web - это программа, обслуживающая запросы клиентов по протоколу HTTP. Иногда серверами WWW называют и другие программы, например, поисковые машины Wide Area Information Server. Но это, на мой взгляд, не совсем точно. Главной задачей сервера "паутины" является обеспечение доступа пользователей к базе данных HTML-документов (ОСС N15, 1995). Однако в настоящее время функциональные возможности серверов и вышли за пределы простой рассылки документов по запросам клиентов. Для современных серверов наиболее типичны следующие функции: ведение иерархической базы данных документов, контроль за доступом к информации со стороны программ-клиентов, предварительная обработка данных перед ответом на запрос, взаимодействие с внешними программами через Common Gateway Interface (ОСС N18, 1995), реализация взаимодействия с клиентами и другими серверами в режиме посредника, реализация встроенных или взаимодействие с внешними поисковыми машинами. Кроме того, такие серверы, как NetSite (Netscape Communication) и Apachie, реализуют шифрованные протоколы HTTP для обмена информацией с клиентами. Рассмотрение перечисленных свойств и функций WWW-серверов полезно провести на примерах из практики эксплуатации серверов NCSA httpd, CERN httpd, Winhttpd и WN.

Структура базы данных сервера WWW

Итак, первой основной задачей для любого WWW-сервера является ведение базы данных. База данных сервера - это часть файловой системы, в которой размещаются файлы HTML-документов. Большинство современных файловых систем, а следовательно, и база данных HTTP-сервера - это иерархические деревья. Для любой базы данных необходимо ввести понятие единицы хранения - минимального объекта, к которому можно обратиться извне или получить его в качестве ответа на запрос. Стандартный объект хранения в базе данных HTTP-сервера - это HTML-документ, который является обычном текстовым файлом. Кроме него, многие серверы поддерживают различные комбинированные объекты хранения, создаваемые в ряде случаев из нескольких файлов или генерируемые программами "на лету".

Составление документа из нескольких файлов основано на механизме подстановок (server site includes), осуществляемых сервером перед отправкой указанных в запросе клиента данных.

Требование подстановки включается в тело документа в виде комментария, с именем подставляемого файла. При анализе документа, содержащего эту строку, вместо последней вставляется содержание файла. Синтаксис таких предложений варьируется от сервера к серверу. Некоторые серверы, например WN, разрешают выполнять условные подстановки.

Существуют и другие способы вставки файла в текст документа. Наиболее интересный из них - создание "скелета" документа, состоящего только из вставок. Необходимость в этом появляется, например, при создании печатной копии гипертекстовой базы данных.

Возможность ссылаться только на часть файла основана на механизме "зон". В этом случае в качестве ответа может служить некоторая группа последовательных строк, а не весь файл. Обычно такую ссылку используют для работы с плоским текстом.

Еще одна важная особенность современных серверов - наличие фильтров, позволяющих выполнять некоторые подготовительные операции над файлом прежде, чем им займется сам сервер. Наиболее часто фильтры применяются для распаковки или преобразования графических файлов.

"Зоны" и фильтры не указываются и не прописываются разработчиком в телах документов базы данных сервера, а обычно настраиваются через файлы конфигурации сервера. Сервер NCSA, например, имеет специально выделенный каталог для своих файлов конфигурации.

Аналогичная структура и у популярного сервера для Windows 3.1 и Windwos NT - Winhttpd. У других серверов, например WN, в каждом каталоге дерева базы данных есть соответствующий файл конфигурации ресурсов.

Описание файлов со специальным назначением следует начинать с файла index.HTML, предназначенного для тех случаев, когда пользователь не указывает в своем запросе конкретный файл базы данных, а просто обращается к серверу или к одному из каталогов: http://polyn.net.kiae.su/ или http://www.w3.org/hypertext/

По умолчанию обращение происходит к файлу index.HTML.

Таким файлом, собственно говоря, может быть любой другой, назначенный при конфигурировании вместо index.HTML файл, но тогда вам придется постоянно помнить о том, что на вашем сервере все не так, как у всех остальных.

Многие серверы имеют файл с именем Access (расширения могут быть различными), который регламентирует доступ пользователей к файлам базы данных сервера. Обычно в таких файлах прописываются адреса, с которых можно или нельзя получить доступ к наборам данных, кроме того, для директории разрешается или запрещается выполнение подстановок и/или CGI-сценариев. Таким образом, эти файлы обеспечивают свою собственную, контролируемую сервером, защиту данных от несанкционированного доступа.

Важным свойством сервера является перенаправление запроса, когда в файле конфигурации появляется указание на другой файл. Тот, кто пробовал работать с Line Mode Browser, наверняка сталкивался со следующей ситуацией: на экран выдается странное сообщение "Сервер выполнил перенаправление запроса. Программа-клиент не умеет делать автоматический перевызов ресурса...". После подобной фразы предлагается одна из ссылок для перехода к требуемой WWW-странице на выбор. До сих пор с этим приходится сталкиваться при обращении по адресу http://www.w3.org/ или http://info.cern.ch/. В данной ситуации имеет место перенаправление запроса на другой ресурс, а так как программа просмотра Line Mode Browser или www не выполняет его, то приходится делать это вручную. Вообще говоря, перенаправление чрезвычайно полезный механизм, его отсутствие во время перемещения страниц с одного сервера на другой в сети повлекло бы за собой жуткую неразбериху.

Кроме простого перенаправления есть еще одна интересная возможность переадресации запросов, связанная со временем хранения файла в базе данных. В заголовке HTTP существует предложение Refresh, которое заставляет клиента периодически, через определенный промежуток времени, без дополнительного требования со стороны пользователя, обращаться к серверу за новой копией файла. При этом сервер, например WN, может перенаправить запрос к другому файлу базы данных. Этот механизм дает возможность организовать цикл из нескольких страниц, которые будут замещать друг друга. Очевидно, что такой механизм найдет применение в рекламных роликах, галереях картинок, информационных досках. В сочетании с CGI-сценариями, он дает возможность простыми средствами организовать довольно сложные динамические страницы.

Последнее, о чем следует упомянуть в связи со структурой базы данных сервера WWW - это файлы-индексы. Эти файлы не следует путать с index.HTML, используемым для доступа по укороченному универсальному локатору ресурса URL. Главное назначение файлов-индексов - обеспечение поиска информации в базе данных WWW-сервера по ключевым словам. Такие серверы, как CERN httpd или WN, имеют специальный модуль, который выполняет функции поисковой машины. Сервер NCSA обычно настраивается на использование внешней поисковой машины, например WAIS, а индексный файл - это инвертированный список, где каждому слову соответствует список документов, в которых это слово встречается. Часто считают, что поиск по ключевым словам реализует полнотекстовый поиск по базе данных, однако это не так. Реально в файлы-индексы попадают только те слова, которые содержаться в части документа, предназначенной для построения индекса. Так, многие серверы позволяют строить индексы по заголовкам документов, по специальным полям пользователя или спискам ключевых слов, указанных в файле конфигурации. В принципе, существует возможность построения индекса с использованием полного текста документа, но при этом следует учитывать, что в полном тексте содержится много общих слов, которые будут занимать место, но не прибавят точности поиску. При создании таких индексов база данных фактически продублируется, только в другом формате.

Все серверы поддерживают возможность запуска внешних программ через спецификацию Common Gateway Interface. Обычно CGI-сценарии расположены в специальном каталоге базы данных сервера. Однако в ряде случаев сценарий может храниться и в произвольном месте файловой системы.

Сервер распознает сценарий либо по месту хранения, либо по расширению имени сценария (как правило, это "cgi").

Обслуживание запросов

Обсудив структуру базы данных сервера, перейдем к обсуждению процедуры обслуживания запросов программ-клиентов World Wide Web. Существует два способа активации сервера: запуск в качестве "демона" или запуск через механизм inetd. В первом случае сервер осуществляет прослушивание 80 порта TCP и запуск обслуживающей запросы части самостоятельно. При этом он может охватить одновременно несколько запросов. Во втором случае сервер инициируется программой обслуживания запросов по мере их поступления. Первый случай предпочтительней, если существует большое количество обращений со стороны программ-клиентов, второй - более экономичный и требует меньшего количества системных ресурсов. После получения запроса сервер принимает его и приступает к разбору заголовка, из которого извлекает информацию о возможностях клиента (например, его способности работы с графикой), определяет адреса клиента и, если необходимо, протоколы предварительной обработки информации. Эти данные используются сервером для анализа прав данного клиента по доступу и его возможностей по проведению подстановок и кодированию текста документа. После этого сервер выделяет из заголовка запрос на ресурс, определяет метод доступа к нему и его тип. Именно здесь принимается решение о запуске сценария или перенаправлении запроса. После выделения запроса на ресурс, сервер активирует программы предварительного преобразования данных (разархивирование, подстановки). Далее начинается формирование ответа на запрос. В заголовке содержатся необходимые инструкции для клиента: если происходит перенаправление запроса - Locate, если необходимо периодическое обновление - Refresh и т.п. Следует отметить, что результат работы сценария также проходит обработку на сервере, который не подставляет дополнительной информации в заголовок ответа только в том случае, если сценарий полностью сформировал HTTP.

Вообще говоря, серверы - это относительно небольшие программы по сравнению с клиентами HTTP. Например, головной модуль сервера WN составляет всего 13911 байт кода на языке Си. Кроме самого сервера, в комплект программного обеспечения, необходимого для организации базы данных World Wide Web, входят средства построения индексов и стандартный набор CGI-сценариев, главным из которых является imagemap. Следует отметить, что не все серверы обслуживают графические стеки гипертекстовых ссылок через imagemap. Сервер WN, например, имеет встроенный модуль обработки таких ссылок. Такое несоответствие осложняет перенос базы данных с одного сервера на другой, и основные усилия здесь затрачиваются на модернизацию системы.

В заключение хотелось бы отметить, что организация своей собственной базы данных WWW вовсе не такая уж сложная задача - в ftp архивах (ftp.kiae.su, ftp.funet.fi, ftp.sunet.se и др.) можно без труда найти все необходимое программное обеспечение. При этом нельзя забывать о том, что при запуске серверов часто необходимо выполнять привилегированные операции, а это разрешено только администратору системы. Из всех серверов, которые мне пришлось устанавливать из исходных текстов, без дополнительных усилий собрался только WN: NCSA требовал некоторых изменений в Makefile, а CERN - установки дополнительной библиотеки общих кодов.


Павел Храмцов - руководитель группы РНЦ "Курчатовский Институт". С ним можно связаться по телефону (095) 196-9124 или по электронной почте: dobr@kiae.su.