Итак, вы уже путешествуете по Web достаточно долго для того, чтобы начать задумываться на предмет: "А как же это все устроено?". Что скрывается за красивыми картинками, которые мы наблюдаем на экране? Посмотрим...
В основе Web-сайта лежит, как правило, набор документов HTML. Хотя и не обязательно - в принципе, могут существовать (и существуют) сайты, не содержащие HTML-документов. Однако о таких феноменах поговорим позднее. Если же за основу сайта взят именно набор HTML-страниц, то представить его себе проще простого. Это набор папок, такой же, как на вашем винчестере, в которых находятся файлы HTML, рисунки и фотографии в форматах gif и jpeg, а также, возможно, и некоторые другие файлы, которые автор сайта решил на нем разместить. Такой сайт напоминает книжку с картинками - перемещаясь по нему, мы переходим с одной страницы на другую, разглядывая их статичные лица. Единственный элемент динамизма, который может присутствовать на страницах с "чистым" HTML - анимированные картинки в формате gif.
Все эти папки с документами находятся на компьютере, имеющем постоянную связь с Интернетом, причем на приличной скорости. Такой компьютер примерно в 90% процентах случаев работает под управлением одного из клонов UNIX. Почти все из оставшихся 10% приходится на долю Windows-NT. Web-сайт располагается в одной из директорий жесткого диска машины-сервера. Когда сервер получает запрос на соответствующий URL, то возвращает клиенту заглавную страницу сайта. Но можно обратиться не только к заглавной, но к любой странице сайта непосредственно (вы делали это много раз)! Для этого после имени сервера надо указать путь к необходимому файлу из начального каталога сервера (если этот путь вам известен).
Иногда, однако, желательно привнести некоторую интерактивность и динамизм в HTML-документы. Например, заставить кнопки нажиматься, когда пользователь подводит к ним курсор. Или добавить бегущую строку, которая подсказывала бы пользователю, куда ведет та или иная ссылка. Всех этих эффектов достигают, используя встраиваемый в HTML-файлы язык программирования - Java Script. Этот язык специально предназначен именно для работы с HTML и содержит массу специальных средств для их оживления. Например, при помощи него можно проверять на корректность содержимое форм.
Дополнением к JavaScript служат так называемые Java-апплеты. Это - приложения, написанные на языке программирования Java и специально предназначенные для использования в среде HTML-документа. Апплет образует на странице как бы отдельное окно (визуально, однако, неотделимое от основного документа), в котором и работает. В отличие от JavaScript, Java-апплет не может манипулировать окружающим его документом. Зато внутри своего окошка он может быть сколько угодно сложной программой - от примитивной анимации до сложного игрового приложения, осуществляющего попутно связь с сервером и другими пользователями. Это достигается благодаря тому, что Java - настоящий полноценный язык программирования, в отличие от узкоспециализированного JavaScript. На сервере апплеты хранятся в отдельных файлах, а к HTML-документу подключаются через специальные гиперссылки, почти так же, как картинки.
При помощи Java и JavaScript можно добиться любого уровня интерактивности страницы. Фактически нет ничего, что нельзя было бы сделать с их помощью. Однако у них есть одна особенность - программы на этих языках не могут модифицировать ни данные на жестком диске вашей машины, ни на сервере. Это из соображений безопасности. Представьте, что могло бы быть, если бы программам, получаемым по Internet, был доступен ваш жесткий диск! Почему таким программам нельзя модифицировать данные на сервере, объяснить несколько сложнее, но тоже можно.
Фактически программа на Java/JavaScript выполняется на вашей локальной машине, а связь с сервером осуществляет по тому Internet-каналу, которым вы пользуетесь. Таким образом, модификация данных на сервере для такой программы - это модификация данных на жестком диске удаленной машины. Надо ли говорить, насколько это небезопасно? Поэтому возможность такой модификации не поддерживается ни упомянутыми выше языками, ни протоколами связи. Все, что может сделать приложение на машине пользователя - это дать знать серверу о том, что необходима такая модификация. Модифицировать же данные должен сам сервер.
Как он это делает? Сейчас мы подходим к рассмотрению самой сокровенной части UNIX-сервера - директории cgi-bin. Итак, обработкой данных на сервере занимаются специальные приложения, которые получают информацию от выполняемых на машине клиента программ (а чаще даже не от программ, а непосредственно из форм в HTML-документах). Называются такие программы по-английски cgi-scripts, а по-русски - cgi-сценарии. Сокращение cgi обозначает "Common Gateway Interface", что по-русски звучит как единый интерфейс шлюза. До сих пор все выглядит достаточно загадочно, бытует даже мнение о потрясающей недоступности приложений cgi для понимания рядового пользователя. Это мнение усиленно поддерживается большей частью литературы по HTML, которую мне приходилось видеть. На практике cgi - вещь для понимания удивительно простая. Есть, правда, одна причина, по которой cgi-приложения обычно доверяют писать только профессионалам. Однако об этом позже.
Итак, cgi-script - это обычная программа, находящяяся в специальной директории-папке сервера. Традиционно эта директория называется cgi-bin. Физически эта папка от всех остальных папок сервера ничем не отличается - просто еще одно место для файлов на жестком диске. Разница между ней и всеми остальными папками заключается в том, что когда пользователь запрашивает один из документов, находящихся в этой директории, соответствующий файл вместо отправки пользователю запускается на выполнение. При этом в URL к такому файлу обычно включаются некоторые параметры, которые передаются программе при ее выполнении.
Пользователь же в качестве ответа на свой запрос получает то, что пограмма-сценарий выводит на свой стандартный вывод (за этим термином скрывается то место, куда попадают символы, выводимые операторами печати на экран вроде print в Бейсике или write в Паскале). Другими словами, программа-скрипт должна сама сформировать текст передаваемого пользователю документа.
Понятно, что такая программа является для сервера локальным приложением и может модифицировать данные на его жестком диске, а также читать данные из локальных файлов. Поэтому cgi-сценарии могут успешно использоваться для автоматизированной обработки форм, генерации страниц в зависимости от запросов пользователя и многого другого. При помощи скриптов можно полностью упразднить HTML-документы из состава сервера, если формировать все необходимые страницы динамически. Отличный пример такого сайта - сервер "Компьютерных Вестей" www.kv.minsk.by.
Еще одно важное применение для cgi-сценариев - взаимодействие удаленного пользователя с прикладным программным обеспечением на сервере. Например, с сервером баз данных. Пользователь заполняет форму-запрос к базе данных, расположенной на сервере и нажимает кнопку "отправить". Содержимое формы передается соответствующему скрипту, который в свою очередь формирует на сервере запрос к базе данных, получает его результат и генерирует на его основе документ, пересылаемый пользователю.
Сами скрипты, в принципе, могут писаться на любом из языков программирования. На практике чаще всего используются Perl, C и Unix Shell. Это связано с тем, что в них имеются некоторые дополнительные средства, облегчающие написание таких скриптов. Однако в принципе можно использовать любые выполняемые файлы - хоть на Коболе, если ваш сервер позволяет выполнять программы на нем.
Почему же написание cgi-скриптов обычно доверяют только профессиональным разработчикам? Дело в том, что они могут служить источником серьезных проблем, связанных с безопасностью данных на сервере. Поскольку скрипт - это настоящая исполняемая программа, она может делать на сервере практически все, что угодно, в рамках прав пользователя, который ее выполняет. Правда, обычно cgi-скрипты выполняются с правами наиболее бесправного пользователя - nobody, которому почти все запрещено. Однако тогда встает иная проблема - такой пользователь имеет право читать и модифицировать файлы только с очень высокими правами доступа, часто только с правами 777, что на языке UNIX означает "с этим файлом кто угодно может делать что угодно". При этом остро встает вопрос о сохранности данных в таких файлах (а ведь именно в них скрипты собирают информацию, например, анкетную). Однако вопросы безопасности слишком сложны, чтобы описывать их в этой статье.
В заключение хочу сказать - если вы не умеете программировать на JavaScript, Java или для CGI - не расстраивайтесь - в сети имеются огромные развалы уже готовых скриптов и апплетов. Все, что вам остается - это лишь использовать их.
Денис МАРГОЛИН