6.2.
Common Gateway Interface
CGI - Common Gateway Interface является стандартом интерфейса (связи)
внешней прикладной программы с информационным сервером типа HTTP, Web
сервер.Обычно гипертекстовые документы, извлекаемые из WWW серверов,
содержат статические данные. С помощью CGI можно создавать
CGI-программы, называемые шлюзами, которые во взаимодействии с такими
прикладными системами, как система управления базой данных,
электронная таблица, деловая графика и др., смогут выдать на экран
пользователя динамическую информацию. Программа-шлюз запускается WWW
сервером в реальном масштабе времени. WWW сервер обеспечивает передачу
запроса пользователя шлюзу, а она в свою очередь, используя средства
прикладной системы, возвращает результат обработки запроса на экран
пользователя. Программа-шлюз может быть закодирована на языках C/C++,
Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script. Как
выполнимый модуль, она записывается в поддиректорий с именем cgi-bin
WWW сервера.
Для передачи данных об информационном запросе от
сервера к шлюзу, сервер использует командную строку и переменные
окружения. Эти переменные окружения устанавливаются в тот момент,
когда сервер выполняет программу шлюза. Информация шлюзам передается в
следующей форме:
Возьмем результат работы формы с методом POST
(METHOD="POST") в качестве примера. Пусть получено 7 байт,
закодированных примерно так:
Первым символом в стандартном потоке ввода для
шлюза будет "a", за которым будет следовать остаток закодированной
строки. Шлюз в командной строке от сервера получает: остаток URL после
имени шлюза в качестве первого параметра (первый параметр будет пуст,
если присутствовало только имя шлюза), и чередующиеся имена полей
формы с добавленным знаком равенства (на четных позициях) и
соответствующих значений переменных (на нечетных позициях).
Шлюз осуществляет свой вывод в стандартный
поток вывода. Этот вывод может представлять собой или документ,
сгенерированный шлюзом, или инструкции серверу, где получить
необходимый документ. Как правило, шлюз производит свой вывод,
который интерпретируется и посылается обратно клиенту. Преимущество
этого подхода состоит в том, что шлюз не должен посылать полный
HTTP/1.0 заголовок на каждый запрос. Вывод шлюза начинается с
маленького заголовка. Он содержит текстовые строки, в том же формате,
как и в HTTP заголовке и завершается пустой строкой (содержащей
только символ перевода строки или CR/LF). Любые строки заголовка, не
являющиеся директивами сервера, посылаются непосредственно клиенту.
имя=значение&имя1=значение1&..,
где имя - имя переменной (из оператора FORM, например), и значение -
ее реальное значение. В зависимости от метода, который используется
для запроса, эта строка появляется или как часть URL
(в случае метода GET), или как содержимое HTTP запроса (метод POST).
В последнем случае, эта информация будет послана шлюзу в стандартный
поток ввода.
a=b&b=c.