Современный 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-модули могут иметь опасный для
сервера характер, и поэтому все вопросы,
связанные с их использованием, следует
оговаривать с администратором сервера.
Сергей
Подольский, ГГУ им. Ф. Скорины
Источник: http://www.nestor.minsk.by/kg
|