- В России производится втрое больше компьютеров, чем магнитофонов
- За свои фекалии военнослужащие выложили 58 миллионов рублей
Московский комсомолец, 22/9/1997
Как известно всякому русскоговорящему труженику Паутины, в заголовок нашей сегодняшней заметки вынесен дословный русский перевод термина CGI (Common Gateway Interface). О нем (то есть о междумордии, а не о термине) мы и поговорим в нынешней заметке. По моему глубокому убеждению, хотя бы начальное знакомство с CGI и принципами его работы необходимо всякому, кто уже освоил азы HTML, или намеревается это сделать в обозримом будущем. Человеку, который никогда не собирается писать документов для веба, это знание строго необязательно, однако иногда оно может оказаться полезно просто для того, чтобы эффективно пользоваться чужими страницами и программами... Впрочем, начнем с самого начала - с официального определения.
The Common Gateway Interface, or CGI, is a standard for external gateway programs to interface with information servers such as HTTP servers.
Если оно показалось вам запутанным или бессмысленным, то знайте: вы в этом не одиноки. Поэтому попробую объяснить идею простыми словами, не претендуя на лаконизм или словарность формулировки.
CGI - это набор правил "общения" между программой-сервером WWW и любыми другими программами на той машине, где этот сервер работает. "Общение" в этом случае означает, что программа, отвечающая за показ домашних страниц удаленным пользователям, может принимать от них информацию, передавать ее для обработки другим программам, получать результат их работы и посылать его по протоколу HTTP в ту бродилку, от которой поступил запрос. Это, в свою очередь, позволяет посетителям страниц Паутины запускать различные программы на удаленном сервере и видеть результат работы этих программ в окне своей бродилки.
Если это объяснение показалось вам столь же запутанным или бессмысленным, как предыдущее, я тоже не удивлюсь. Поэтому перейдем от сухой теории к сугубо прагматическому вопросу: зачем и кому это может быть нужно?
По утверждению создателей АльтаВисты, в мире сегодня насчитывается 1.1 млн паутинных серверов. На каждом из них размещается определенное количество гипертекстовых или просто текстовых документов (файлов, "страниц"), которые пользователь может в любое время запросить с помощью программы-клиента (бродилки). При всех своих достоинствах, в одном аспекте эти виртуальные документы сродни бумажным: они статичны, и их содержание не меняется в зависимости от запросов и действий читателя, или от других внешних событий.
До тех пор, пока речь идет о литературных произведениях [🔗], архивных материалах [🔗], таблице Менделеева [🔗], Священном Писании [🔗] или любой иной "нетленке", такая ситуация, может еще считаться приемлемой. Но абсолютное большинство потребляемой нами информации меняется с течением времени. В бумажном документе не могут автоматически отражаться эти изменения. А в компьютерном - могут, причем запросто. Не сами по себе, конечно, а за счет программы, которая меняет содержимое документа в зависимости от тех или иных отслеживаемых ею показателей. Например, на сайте Клинтона [🔗] есть приветствие [🔗] и фотография Белого Дома [🔗], которые меняются в зависимости от времени суток в Вашингтоне. Другой, столь же детсадовский, но гораздо более популярный пример - счетчики посещений текущей страницы [🔗], которые показывают новую цифру при каждой загрузке. Разумеется, есть и более осмысленные применения - например, вывод курса валют [🔗] или акций [🔗] в режиме реального времени... Все эти примеры иллюстрируют первый случай использования CGI: динамическое отражение меняющихся во времени данных.
Представим себе другую ситуацию. Информация, содержащаяся в Энциклопедии Britannica, меняется не чаще раза в год, да и то основные изменения касаются хроники текущих событий в Ежегоднике. Зато меняются - от пользователя к пользователю - обращенные к энциклопедическому серверу запросы. Один посетитель хочет посмотреть все статьи, содержащие слово Russian. Другого интересуют все английские писатели. Третьего - все, что связано с бейсболом. Четвертого - арабский алфавит... Создавать статичные страницы с постоянным адресом для каждого возможного запроса - задача столь же неподъемная, сколько и бессмысленная. Гораздо проще загнать всю информацию на сервере в одну базу данных, откуда специальная программа будет выуживать лишь те сведения, на которые поступил запрос. Так работает абсолютное большинство сетевых справочников, каталогов, магазинов. Так же устроены все онлайновые словари и поисковые машины. Самый простой пример динамического форматирования данных - скрипт, позволяющий посетителям ВИ решать, сколько свежих записей из гостевой книги они желают просмотреть. Более сложный, но также не требующий использования серьезной СУБД - интерфейс к тексту Библии, в котором для вызова определенного стиха или главы не нужно грузить целиком всю книгу. Во всех этих примерах CGI используется для избирательной выдачи информации по заданному пользователем критерию.
Идем далее. Паутинный сервер может с одинаковым успехом использоваться как для распространения, так и для сбора любых видов информации. Если для первой цели можно обойтись статическими документами, то вторая предполагает наличие программ, принимающих сведения от пользователя для обработки, хранения или передачи адресату. Примеры многообразны: CGI-программы готовы переварить любую информацию, от писем в редакцию и bug reports до записей в гостевую книгу или webboard, пользовательских анкет и онлайновых платежей. Во всех этих столь различных между собой примерах CGI используется для обеспечения двусторонней связи между посетителем и создателем сайта.
Во всех перечисленных выше случаях умные программы, запускаемые через CGI, выступали как подручный инструмент для дурака-вебмастера. Справедливость требует изобрести ситуацию, при которой бы Паутина служила вспомогательным инструментом для программы, подключенной через CGI. Придумывать, впрочем, ничего не надо: достаточно длинный список таких примеров можно найти на сервере NETMIND.COM. В качестве еще одного примера создавалась в свое время АльтаВиста, задуманная не как искалка, а как демонстрация мыслительных способностей компьютера Digital Alpha 8400 TurboLaser (доступных для эксплуатации в локальном режиме любым покупателем чудо-машины). Такова, во всяком случае, нынешняя официальная версия. Генератор жалоб Скотта Пакина следует отнести сюда же. Из русских примеров можно назвать Фабрику обоев under construction, Сократ или сервер Pochta.Ru (который, кстати сказать, постепенно приходит в рабочее состояние). Во всех этих случаях мы имеем дело с самоценной полезной программой (или сетевым сервисом), для которых паутинный интерфейс служит средством доступа и рекламы.
Предложенная классификация сугубо утилитарна, и при желании ее можно довольно легко оспорить, поскольку она не основана на глубоком анализе технических решений в основе различных CGI-программ. Скажем, есть такой скрипт - shopping cart, для онлайновых магазинов. В нем сочитается и доступ к базе товаров, и прием платежей. А на Rambler Top100 CGI-программы создают и глупый счетчик, и полезную для начинающего вебмастера детализованную статистику посещения его сайта. Кстати, глупый счетчик сообщает, что сегодня сайт www.anekdot.ru обслужил больше 10.000 запросов. А рамблеровская искалка - 8800 с лишним, что тоже неплохо. С чем их и поздравляем.
А завтра поговорим о практических аспектах использования CGI на различных сайтах - на сей раз с серверной, а не с посетительской стороны.