Познакомимся с CGI

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

Итак, если вы решили, что набор статических Web-страниц больше не удовлетворяет постоянно возрастающим потребностям ведения бизнеса, то пришла пора создавать интерактивный сайт.

Прежде всего оговоримся, что под интерактивностью (от англ. interact - взаимодействовать) мы понимаем способность сервера динамически формировать Web-страницу в зависимости от полученных от пользователя данных. К интерактивным элементам можно отнести гостевые книги, чаты, поисковые машины, Web-интерфейсы виртуальных магазинов и служб электронной почты и т.д.

В зависимости от платформы Web-сервера, типы программы-обработчика пользовательских данных (в дальнейшем - CGI-модуль) могут варьироваться, но наибольшее распространение получили: для UNIX-серверов - интерпретируемые в процессе выполнения С, С++, Shell (командная строка), Perl - модули. Для Windows-серверов - .exe,.dll, Perl - программы, ASP (Active Page Scripts) - скрипты.

В своем функциональном назначении, технологии Perl и ASP схожи, и создавались они именно для написания CGI-модулей. Однако их использование требует специальных знаний и желательно, когда формирование ответа критично ко времени и требуется сложная обработка данных, связанная с множественными параллельными запросами к базам данных, например. Короче говоря, если вы хотите интегрировать ваш модуль с готовыми решениями, то стоит обратить внимание именно на эти технологии. В остальных случаях можно обойтись классическим языком программирования.

Процесс создания CGI-модуля состоит из нескольких основных этапов. Сначала следует четко уяснить, какую функциональную нагрузку он будет нести. Затем определяют, с помощью каких элементов html-форм данные будут отправляться на сервер (справедливости ради следует заметить, что они могут посылаться непосредственно из URL и с использованием сенсорных изображений). И, наконец, какие действия должен выполнить сервер в ответ на запрос (как правило, это работа с локальными файлами и динамическое формирование Web-страницы). После того, как все пункты обозначены, можно приступать к написанию программы.

Отправка данных на сервер. Существуют два принципиально различных способа отправки браузером данных на сервер - "Post" и "Get". В первом случае открывающий тэг формы имеет вид:

<FORM ACTION="http://www. myserverurl/cgipath/cgimo-dule.exe" METHOD="Post">

Далее, естественно, должны следовать управляющие элементы формы. В случае корректности Web-страницы, по нажатию элемента с функцией "Submit", браузер отправляет содержимое html-форм на сервер. В свою очередь, сервер запускает процесс, обозначенный в поле "ACTION" и передает вспомогательную информацию, доступную модулю через переменные окружения:

Имя переменной

REQUEST_METHOD
SERVER_PROTOCOL
URL
QUERY_STRING
PATH_INFO
PATH_TRANSLATED
HTTP_CACHE_CONTROL
HTTP_DATE
HTTP_ACCEPT
HTTP_FROM
HTTP_HOST
HTTP_IF_MODIFIED_SINCE
HTTP_REFERER
HTTP_USER_AGENT
HTTP_CONTENT_ENCODING
HTTP_CONTENT_TYPE
HTTP_CONTENT_LENGTH
HTTP_CONTENT_VERSION
HTTP_DERIVED_FROM
HTTP_EXPIRES
HTTP_TITLE
REMOTE_ADDR
REMOTE_HOST
SCRIPT_NAME
SERVER_PORT
HTTP_CONNECTION
HTTP_COOKIE
HTTP_AUTHORIZATION

Доступ к переменным окружения осуществляется посредством WinApi функции GetEnvironmentVariable, которая описана в документации по использованию Api.

После запуска CGI-модуля в стандартный поток ввода посылаются данные html-форм, длиной "HTTP_CONTENT_LENGTH". Вся информация поступает единым блоком в формате: имя_формы1="посылаемые_ данные"&имя_формы2="посылаемые_данные"&... Задача CGI-модуля раскодировать полученные данные, выполнить над ними или какими-либо другими необходимые действия и послать пользователю ответ. Ответ посылается, как правило, в стандартный поток вывода в формате:

Content-Type: text/html

<html-документ>

После первой строки пустая строка обязательна.

Отличие метода Get заключается в том, что данные форм передаются непосредственно в URL-запросе в формате: http://www. myserverurl/cgipath/cgimodule.exeэимя_формы1="посылаемые_данные"&имя_формы2="посылаемые_данные"&..., причем они доступны CGI-модулю через переменную окружения URL. Очевидно, что как и в первом случае, обрабатываемые данные необходимо извлекать. В случае, если в запросе встречаются т.н. символы местного языка, то они кодируются браузером в виде # (N№ символа в кодовой таблице), а затем автоматически декодируются сервером.

В любом случае, после отправки данных, браузер ожидает получения Web-страницы.

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

Примечание 1. Под стандартным вводом понимается тот же поток, что и с клавиатуры, а выводом - тот же поток, что и на монитор. Разумеется, CGI модуль не получает консоли, она эмулируется сервером описанным выше способом.
Примечание 2. При создании модуля для WinNT - платформы на машине Windows 95/98, очень удобно установить Microsoft Personal Web Server, который позволит отлаживать скрипты на вашем компьютере. Эту небольшую программу можно загрузить, в частности, с ftp.unibel.by .
Примечание 3. Следует обратить внимание, что CGI-модули могут иметь опасный для сервера характер, и поэтому все вопросы, связанные с их использованием, следует оговаривать с администратором сервера. Сергей Подольский, ГГУ им. Ф. Скорины child@gsu.unibel.by (c) компьютерная газета


Компьютерная газета. Статья была опубликована в номере 37 за 2000 год в рубрике soft :: сапр

©1997-2024 Компьютерная газета