CGI-сценарии
CGI-сценарии это приложения разработанные в соответствии со спецификацией CGI (Common Gateway Interface). Данная спецификация описывает формат и общие правила обмена данными между Web-сервером и внешним приложением. Для обработки потока данных от клиента к Web-серверу и формирования обратного потока из результатов работы приложения в спецификакции CGI определены следующие элементы:
- Переменные окружения - набор переменных среды, которые заполняются сервером при запуске CGI-сценария и содержат информацию о служебных параметрах http-запроса, который инициировал запуск данного сценария;
- Аргументы командной строки - используются для передачи CGI-сценарию входных параметров, которые передаются как часть URL. Например: http://www.site.ru/cgi-bin/prog.pl?par1=val1;
- Стандартные потоки ввода/вывода - при передачи данных от сервера CGI-сценарию организуется взаимодействие: поток STDOUT сервера с потоком STDIN сценария, а при обратной передаче: поток STDOUT сценария взаимодействует с потоком STDIN сервера;
Для разработки CGI-сценариев, подходит множество языков программирования. Единственное ограничение - это поддержка данного языка платформой Web-сервера. Поскольку CGI-сценарий является внешним приложением (не внедряется в документ) для его разработки можно использовать компилируемые языки программирования. Основные языки разработки CGI-сценариев следующие:
· Unix Shell (интерфейс командной строки Unix);
· Perl (интерпретатор);
· C, С++ (компилятор);
· Visual Basic (компилятор);
В общих чертах алгоритм разработки CGI-сценария выглядит следующим образом:
Определение метода http-запроса.
Для этого необходимо считать значение стандартной переменной среды сервера REQUEST_METHOD, в которой содержится тип http-запроса: GET, POST (например в языке С для доступа к переменным среды используется функция - getenv("ИМЯ ПЕРЕМЕННОЙ") ).
Получение данных от сервера.
Для метода GET данные передаются как часть URL запроса. Часть URL (остаток после имени сценария), содержащая передаваемые параметры, записываются в переменную среды сервера QUERY_STRING (в данном случае действует ограничение на длину передаваемого блока данных, обычно при записи URL усекается до 255 знаков).
Для получения данных необходимо считать значение переменной среды QUERY_STRING. Например при отправке данных из формы HTML-документа на обработку сценарию-prg, http-запрос будет выглядеть так:
GET http://www.site.ru/cgi-bin/prg?поле1=знач1&поле2=знач2...
А переменная среды QUERY_STRING = поле1=знач1&...&полеN=значN
Для метода POST данные передаются в STDIN сценария как тело http-запроса, в переменную среды сервера CONTENT_LENGTH записывается количество символов входного потока, а в переменную CONTENT_TYPE записывается MIME-тип передаваемых данных. Для получения данных необходимо считать CONTENT_LENGTH символов из STDIN сценария. Например при отправке данных из формы HTML-документа, на обработку сценарию-prg, http-запрос будет выглядеть так:
POST http://www.site.ru/cgi-bin/prg HTTP/1.0
Content-Type: application/x-www-form-urlencoded
поле1=знач1
...
&полеN=значN
Декодирование полученные данных.
Для дальнейшего использования полученных данных необходимо выполнить их небольшое преобразование, поскольку в полученной последовательности все пробелы заменяются символом +, а символы с десятичным кодом более 128 заменяются на %ХХ, где ХХ-шестнадцатеричный код.
Обработка данных.
Производится выполнение основных функций CGI-сценария, это может быть операции поиска в БД, выполнение определенных расчетов на основе полученных данных, регистрация пользователя в БД, обработка почты и многое другое.
Формирование ответа в форме HTML-документа.
Производится динамическое создание HTML-документа содержащего результаты работы сценария и вывод его в STDOUT сценария. В простейшем случае формируется документ содержащий уведомление пользователя о выполнение сценария. Перед выводом в STDOUT, сценария документ необходимо снабдить MIME-заголовком и разделительной строкой (пара символов CR) отделяющей заголовок от содержимоого тела ответа. Например вот так:
Content-Type: text/html
<HTML>
Все ОK !
</HTML>
Реализации вышеуказанного алгоритма для различных платформ Web-серверов могут существенно отличаться, но приведенные этапы создания сценария достаточно общие.
Дата добавления: 2015-04-19; просмотров: 2151;