|  Common Gateway Interface - средство расширения возможностей World Wide Web технологииМеханизмы обмена данными
 Список переменных окружения
 Применение CGI-скриптов
 Примеры SHELL-скриптов
 Пример С-программы
 Доступ к базе данных под управлением Ingres
 Примеры скриптов
 Пример интерфейсной формы
 Результат выполнения скрипта
 Организация стека графических ссылок 
Главное назначение 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 <stdlib.h>;
#include <sys/types.h>;
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] = ' 00';
     printf("Content-type:
text/htmlnn");
             /* First message of a CGI Programme */
                     
             /* This message must be a first one */
                     
             /* in output sream.                 */
 printf("<TITLE>
C-cgi script.(example#1)</TITLE>n");
     printf("<H3><I>
Russian Research Center "Kurchatov Institute"
<I></H3>n");
     c_uid = -1;
     sscanf(input_ch,"uid=%ld",&uid);
/* Transform input data */
     printf("Input
Nuber:%ld.<BR><HR>",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 '< PRE> '
helpr polyn situat
echo '< /PRE> '
#The end of script
 #!/bin/sh
echo Content-type: text/html
echo
echo '< PRE> '
echo $QUERY_STRING | tr "+" " " | ingres polyn
echo '< /PRE> '
#The end of script
 #!/bin/sh
echo Content-type: text/html
echo
echo '< PRE> '
echo $QUERY_STRING | sed -f symbols | ingres polyn |
 tr "
 |