Общий шлюзовой интерфейс - ключ к интерактивным узлам Web.
РАСПЕЧАТКА 1 - ПРИМЕР КОДА ФОРМЫ HTML
Сегодня мы рассмотрим широко распространенные в Internet службы и поговорим о том, что необходимо сделать администратору сети, чтобы такие службы были доступны как внутри вашей компании (через корпоративную Intranet), так и для других пользователей (через Internet). Темой сегодняшнего разговора будет HTML и общий шлюзовой интерфейс (CGI).
Используя простые теги, вам ничего не стоит сделать гиперссылкой любое слово или фразу. Однако гиперссылкой может быть не только текст, но и изображения. Не будем голословными и обратимся к следующему фрагменту кода:
Этот фрагмент программы выводит графическое изображение FROG.GIF. Если пользователь укажет на данное изображение и щелкнет клавишей мыши, браузер Web пошлет запрос на страницу Web (FROG.HTML) серверу Web (www.amphibian.com).
ОБЩИЙ ШЛЮЗОВОЙ ИНТЕРФЕЙС
HTML, вместе с HTTP, представляет собой базовую технологию World Wide Web. Наиболее привлекательная возможность HTML - гипертекстовые ссылки. При поиске информации в обычной книге, вы должны открыть содержание, а затем пролистать книгу, чтобы отыскать нужную страницу. В противоположность этому, когда вы ищите информацию на Web, простое нажатие на гиперссылку приводит к мгновенному переходу на выбранную страницу - быстро и удобно. Однако HTML предлагает информацию главным образом для чтения. Он не является интерактивным, за исключением тех случаев, когда вы для перемещения по документам используете мышь. Страницы HTML - это статические документы; они не изменяются до тех пор, пока кто-то (обычно администратор Web) не обратится к серверу Web и не отредактирует их.
С самого начала разработчики Web искали способы сделать серверы Web интерактивными, для того чтобы дать возможность пользователям не только получать, но и вводить информацию. Стандартный способ создания такой информации теперь известен как общий шлюзовой интерфейс. Пользователь запрашивает информацию у сервера Web, а тот, используя CGI, запускает программу для поиска информации и возвращает результат пользователю. Для этого сервер Web обычно генерирует страницу HTML, посредством вставки нескольких операторов HTML в уже существующую страницу. Сервер Web, применяющий CGI таким образом, может потенциально запускать самые разнообразные программы.
Если вы использовали механизм поиска Web для того, чтобы найти интересующий вас текст, то вы применяли CGI. Но CGI сам по себе не является механизмом поиска. На самом деле он обеспечивает взаимодействие таких программ, как механизмы поиска, с серверами Web.
Серверы HTTP (Web) в первую очередь предназначены для обслуживания документов HTML. Файлы CGI, однако, не документы, а программы. Для хранения программ CGI большинство серверов используют специальный каталог, обычно называющийся CGI-BIN. Сервер Web знает, что файл, хранящийся в каталоге CGI-BIN, должен исполняться, а не пересылаться для воспроизведения пользовательскому браузеру Web. Программы CGI могут быть написаны на самых разных языках, в том числе на языке командных файлов DOS, BASIC, C и языках описания сценариев, например Perl. Задача CGI как раз в том и состоит, чтобы в нужное время активизировать программу CGI и передать программе любые необходимые данные, созданные пользователем или операционной средой. Программа CGI затем обрабатывает вводимые данные. Выполнив эту обработку (время исполнения - максимум несколько секунд, поскольку целью является интерактивность), программа должна вернуть некоторый результат пользователю через его браузер Web. Для того чтобы браузер мог воспроизвести результат, программа CGI должна преобразовать свои выходные данные в документ HTML.
ФОРМА НА ЛЮБОЙ СЛУЧАЙ
Программа CGI должна каким-то образом получить от пользователя данные для обработки. И тут в игру вступают формы HTML. Они похожи на бумажные бланки ввиду наличия полей для ввода некоторых элементов данных. На Рис. 1 показана простая форма, имеющая одно поле для ввода текста: имя продукта. Кроме того, у этой формы есть поля выбора из нескольких категорий, в которых пользователь может, например, отметить тип продукта, а также указать, какой из сетевых протоколов этот продукт поддерживает. Форма еще имеет кнопку, на которую пользователь должен нажать для передачи введенной информации. (Программа CGI начнет обрабатывать информацию, только когда данные в форме будут переданы программе CGI.) Нажатие кнопки Clear Form приводит к присвоению всем переменным формы значения по умолчанию. Код HTML для этой формы показан на Распечатке 1. Отметим, что указанные на Распечатке 1 номера строк, в реальной программе на HTML отсутствующие, введены для упрощения изложение.
Исходный код формы окружают теги
(см. строки 1 и 14 Распечатки 1). ACTION определяет действия, которые будут предприняты после передачи формы. Иными словами, ACTION определяет, какая программа CGI должна быть запущена для обработки формы, и вы указываете или полный, или частичный URL данной программы (в нашем случае это /SGI-BIN/EXAMPLE.PL). В зависимости от сервера Web вы можете задать для всех программ CGI каталог по умолчанию. Если программа, которую вы хотите запустить, хранится в этом каталоге, то достаточно указывать только имя файла, ее содержащего. В противном случае вам, возможно, придется написать полный URL файла.METHOD используется для передачи входных данных из формы в программу CGI, обрабатывающую эти данные. Несколько позже мы подробно рассмотрим представленный здесь метод, а пока отметим, что можно использовать два основных метода: GET и POST. Если вы собираетесь применять для передачи данных из формы в программу CGI, указанную в ACTION= "/SGI-BIN/EXAMPLE.PL", метод GET, убедитесь, что эта программа CGI способна воспринимать данные, переданные таким образом. Кроме того, если вы используете для передачи данных из вашей формы метод POST, удостоверьтесь, что программа ожидает получения данных именно по этому методу.
Строки 2 и 3 Распечатки 1 сообщают пользователю о том, что нужно ввести данные. Следующая затем строка программы помещает в форму текстовое поле (строка 4). Ввод INPUT TYPE="TEXT" информирует браузер Web о том, что это поле является текстовым. Определение NAME="NAME" указывает имя поля - NAME. (В нашем примере запрашивается название продукта; если вы хотите попросить пользователя ввести адрес, то можете назвать это поле ADDRESS.) SIZE="25" говорит о том, что текстовое поле будет иметь размер, достаточный для отображения 25 символов одновременно. MXLENGTH="30" означает, что поле может вмещать до 30 символов текста. Иначе говоря, если вы наберете больше 25 символов, текст начнет сдвигаться. Как только число введенных символов достигнет 30, никакие дополнительные символы ввести больше не удастся, и последует предупредительный сигнал.
Далее в форме расположены кнопки переключения, а еще ниже - рамки для выставления флажков. И те и другие позволяют осуществлять выбор среди нескольких возможностей, но они несколько отличаются по своему назначению. Вы можете одновременно отметить несколько флажков, но выбрать только одну кнопку переключения. Для сравнения, выбор одного флажка не отменяет выбора другого.
Давайте сначала поговорим о кнопках переключения. Кнопка определяется указанием RADIO в качестве типа ввода. Три строки (с 6 по 8) относятся к кнопкам переключения, каждую из которых можно выбрать. Все строки содержит комбинацию NAME="PRODTYPE", определяя логическое поле с именем PRODTYPE. Если отмечена первая кнопка, поле PRODTYPE примет значение BRIDGE. (Значение определяется комбинацией "VALUE="BRIDGE"".) Обратите также внимание на ключевое слово CHECKED в строке 6. При первом появлении формы будет выделена кнопка BRIDGE; иными словами, это значение мы сделали значением по умолчанию; пользователь может изменить его, нажав на кнопки Router или Switch.
Далее идет серия из трех флажков, позволяющих выбрать, какой из сетевых протоколов поддерживает продукт (строки с 9 по 11). При щелчке в рамке флажка появляется "X", указывающий на то, что флажок поднят; при повторном щелчке "X" исчезает, т.е. флажок снимается.
Рамка флажка создается при помощи фразы "INPUT TYPE="CHECKBOX". Для того чтобы программа работала правильно, вы должны определять тип вводимого параметра как одно слово. Вы должны также указать название поля ввода. В Распечатке 1 имя поля ввода для первого флажка определено как IP. Как видите, код содержит еще ключевое слово CHECKED, указывающее на то, что по умолчанию этот флажок будет отмечен; очистить его пользователь может, просто щелкнув в рамке.
Когда флажок поднят, значение по умолчанию для поля с этим именем равно "ON". Хотя в примере это не указано, вы можете дополнительно использовать атрибут VALUE для установки значения, например "GREEN", в случае если этот флажок отмечается. В нашем примере все три флажка по умолчанию выделены. Таким образом, если пользователь не снимет флажок, форма вернет значения IP=ON, IPX=ON и APPLETALK=ON. Если отмечен только флажок IP, форма вернет только IP=ON. Флажки, соответствующие IPX и APPLETALK, мы не включили.
Строка 12 Распечатки 1 определяет кнопку SUBMIT. После заполнения формы для ее передачи программе CGI, запускаемой на сервере Web, пользователь должен нажать на кнопку SUBMIT. Как можно видеть в строке 12, кнопка SUBMIT создается при указании SUBMIT в качестве типа ввода. Текст, размещаемый на кнопке, можно задать в переменной VALUE.
Когда пользователь нажимает на кнопку SUBMIT, браузер Web предпринимает некоторые действия, определенные в ACTION для этой формы (например, как в строке 1 Распечатки 1). В данном случае сервер Web запустит сценарий на языке Perl, который в нашем примере называется EXAMPLE.PL и расположен в каталоге CGI-BIN.
Как сервер Web узнает о том, что ему нужно выполнить программу, а не просто передать ее в ответ на запрос браузера Web? Это следует из названия каталога, где программа находится - CGI-BIN. В большинстве серверов Web этот каталог зарезервирован специально для исполняемых файлов. (Вы можете хранить исполняемые файлы и в других каталогах, но CGI-BIN должен содержать все файлы, предназначенные для удаленного запуска через Web.)
Хранение всех исполняемых файлов в каталоге CGI-BIN является, кроме того, хорошей мерой защиты. Как администратор Web, вы должны разрешить серверу Web выполнять только находящиеся в этом каталоге программы. Помимо этого, тщательно проверьте все программы, помещаемые в данный каталог, и убедитесь, что они не могут быть использованы для порчи, или замены файлов, или обхода мер защиты. Если, к примеру, кто-то может применять одну из ваших программ для того, чтобы прочитать файл системных паролей, защита вашей системы никуда не годится.
В рассматриваемом нами примере мы упомянули Perl, Practical Extraction and Report Language. Для тех, кто с ним не знаком, поясним. Perl представляет собой интерпретируемый язык, который изначально разрабатывался для использования в Unix-системах, но сейчас он перенесен во многие другие операционные системы. Интерпретаторы Perl существуют, например, для систем Macintosh и Windows NT. Программы на языке Perl обычно называют сценариями, поскольку, по сравнению с разработкой программ на C и других стандартных языках программирования, создаются они относительно быстро и просто. Perl ближе к языку командных файлов DOS, нежели к классическим языкам программирования. Особенно хорош Perl в работе со строками, что, как вы уже имели возможность убедиться, очень важно для программирования CGI.
Строка 13 Распечатки 1 описывает кнопку Reset. Если пользователь нажмет на эту кнопку, все параметры устанавливаются равными значениям по умолчанию. В нашем примере будут отмечены кнопка переключения Bridge и все три флажка (IP, IPX и AppleTalk).
При нажатии на кнопку Submit информация передается серверу Web в виде пар из имен полей (также называемых ключами) и значений. Предположим, что в приводимом нами примере формы пользователь в качестве имени продукта ввел SuperDuper, отметил кнопку переключения Router и в качестве поддерживаемых протоколов указал IP и IPX. В этом случае, при нажатии на кнопку Submit, форма будет передана с параметрами NAME=SuperDuper, IP=ON и IPX=ON. (Если флажок AppleTalk снят, то значения поля AppleTalk ("AppleTalk=off") просто не будет переданон.)
Итак, мы рассмотрели, как формы HTML получают информацию от пользователя Web и передают ее программе CGI в виде пары ключ/значение. Поскольку оператор ACTION, заданный в открывающем теге
>>>ПОДРОБНОСТИ В INTERNET
http://hoohoo.ncsa.uiuc.edu/cgi
http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/fill-out-forms/ overview.html
Одним из лучших способов получить информацию о сервисах Internet, таких как World Wide Web, является сама Web. Мы перечислили здесь несколько URL, но этим их список далеко не исчерывается. Для этого можно использовать механизм поиска AltaVista компании Digital (http://www.altavista.digital.com), указав в качестве параметра поиска "common gateway interface".