WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Common Gateway Interface - средство расширения возможностей World Wide Web технологии

Common Gateway Interface - средство расширения возможностей World Wide Web технологии


Дата публикации: 17-03-2013

Главное назначение Common Gateway Interface - обеспечение единообразного потока данных между сервером и прикладной программой, которая запускается из-под сервера

CGI-скрипт - программа написанная в соответствии со спецификацией Common Gateway Interface. CGI-скрипты могут быть написаны на любом языке программирования (C, C++, PASCAL, FORTRAN и т. п.) или командном языке (shell, cshell, командный язык MS-DOS, Perl и т. п.). Скрипт может быть написан даже на языке редактора EMAC в системах Unix

Шлюз - это CGI-скрипт, который используется для обмена данными с другими информационными ресурсами Internet или приложениями-демонами. Обычная CGI- программа запускается сервером HTTP для выполнения некоторой работы, возвращает результаты серверу и завершает свое выполнение Механизмы обмена данными

переменные окружения
формат командной строки
формат стандартного ввода
формат стандартного вывода

Список переменных окружения

К общим переменным окружения относятся:

SERVER_SOFTWARE - определяет имя и версию сервера
SERVER_NAME - определяет доменное имя сервера
GATEWAY_INTERFACE - определяет версию интерфейса

К запрос-ориентированным относятся:

SERVER_PROTOCOL - протокол сервера
SERVER_PORT - определяет порт TCP, по которому осуществляется взаимодействие (80 порт)
REQUEST_METHOD - определяет метод доступа к информационному ресурсу
PATH_INFO - передает программе путь (адрес скрипта) в виде, указанном в HTML-документе
PATH_TRANSLATED - то же, что и PATH_INFO, но только после подстановки сервером определенных в его конфигурации вставок
SCRIPT_NAME - определяет адрес скрипта так, как он указан клиентом
QUERY_STRING - определяет содержание запроса к скрипту

Идентификация пользователя и его машины:

REMOTE_HOST - доменный адрес машины, с которой осуществляется запрос
REMOTE_ADDR - IP-адрес запрашивающей машины
AUTH_TYPE - тип идентификации пользователя
REMOTE_USER - идентификация пользователя
REMOTE_IDENT - устанавливается сервером; предназначена для первоначального использования скрипта
CONTENT_TYPE - определяет MIME-тип данных, передаваемых скрипту
CONTENT_LENGTH - определяет размер данных в байтах, которые передаются скрипту

Стандартный ввод CGI-скрипта

Методы GET или Post
CONTENT-LENGHT
CONTENT-TYPE
QUERY-STRING

Стандартный вывод CGI-скрипта

Заголовок
CONTENT-TYPE
Location
Status
Тело ответа (обычно текст)

Применение CGI-скриптов

Простейшие SHELL-скрипты
Вызов внешней программы через SHELL
Вызов модуля "С"
Доступ к базам данных
Imagemap

Примеры SHELL-скриптов

#!/bin/sh
echo Content-type: text/plain
echo
echo This is the result of script execution.
#The end of script

#!/bin/sh
echo Content-type: text/plain
echo
echo $REQUEST_METHOD
echo $QUERY_STRING
echo $CONTENT_TYPE
echo $CONTENT_LENGTH
#The end of script.

#!/bin/sh
echo Content-type: text/plain
echo
finger paul@polyn.kiae.su
#The end of script.


Пример С-программы

#include ;
#include ;
main()
{
long i,n,uid;
char input_ch[1024];
char *env;

env = getenv("CONTENT_LENGTH");
/* Here we recieve a length */
sscanf(env,"%d",&n);
/* of input stream and form */
for(i=0;i<;n;i++)
/* command line */
{ input_ch[i] = getchar(); }
input_ch[i] = '\000';

printf("Content-type: text/html\n\n");
/* First message of a CGI Programme */
/* This message must be a first one */
/* in output sream. */


printf("C-cgi script.(example#1)\n");
printf("

Russian Research Center \"Kurchatov Institute\"

\n");

c_uid = -1;
sscanf(input_ch,"uid=%ld",&uid);
/* Transform input data */
printf("Input Number:%ld.

",uid);
exit(0);
}

Доступ к базе данных под управлением Ingres

Простой вызов постоянного запроса
Форматирование вывода
Запрос через Query-String
Фильтрация

Примеры скриптов

#!/bin/sh
echo Content-type: text/plain
echo
ingres polyn < query
#The end of script

#!/bin/sh
echo Content-type: text/plain
echo
helpr polyn
#The end of script

#!/bin/sh
echo Content-type: text/html
echo
echo ' '
helpr polyn situat
echo ' '
#The end of script

#!/bin/sh
echo Content-type: text/html
echo
echo ' '
echo $QUERY_STRING | tr "+" " " | ingres polyn
echo ' '
#The end of script

#!/bin/sh
echo Content-type: text/html
echo
echo ' '
echo $QUERY_STRING | sed -f symbols | ingres polyn | tr "\007" "*" | head 100
echo ' '
#The end of script




Организация стека графических ссылок

Скрипт imagemap





# метка : адрес файла описания картинки
russia : /usr/local/etc/httpd/cgi-bin/maps/russia.map
brussia : /usr/local/etc/httpd/cgi-bin/maps/brussia.map
....

#описание прямоугольника
rect 10 20 100 200
circle 50 50 60 60
poly 10 10 20 20 20 10
Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Cory Dodt:

"Если называть Python заменой BASIC, то тогда и трансформер Optimus Prime — это только замена грузовика."

Опрос

Ваша ОС?

Windows XP
Windows 7
др. версия Windows
Linux
др. ОС