Спецификации CGI
| Переменные окружения | Опции командной строки | Стандартный ввод | Стандартный вывод |
CGI скрипт -- программа, написанная в соответствии со спецификацией Common Gateway Interface. CGI скрипты могут быть написаны на любом языке программирования(C, C++, PASCAL, FORTRAN и т.п.) или командном языке (shell, cshell, командный язык MS-DOS, Perl и т.п.). Скрипт может быть написан даже на языке редактора EMAC в системах Unix.
Шлюз -- это CGI скрипт, который используется для обмена данными с другими информационными ресурсами Internet или приложениями-демонами. Обычная CGI программа запускается сервером HTTP для выполнения некоторой работы, возвращает результаты серверу и завершает свое выполнение. Шлюз выполняется точно также, только, фактически, он инициирует взаимодействие в качестве клиента с третьей программой. Если эта третья программа является сервисом Internet, например, сервер Gopher, то шлюз становится клиентом Gopher, который посылает запрос по порту Gopher, а после получения ответа пересылает его серверу HTTP. Аналогично происходит взаимодействие с серверами распределенных баз данных, например Oracle. На рисунке представлена схема взаимодействия сервера HTTP с сервером Gopher через шлюзовую программу.
Собственно спецификация CGI описывает четыре набора механизмов обмена данными:
- переменные окружения
- формат командной строки
- формат стандартного ввода
- формат стандартного вывода
Опции командной строки. Командная строка используется только при запросах типа ISINDEX. При HTML FORMS или любых других запросах неопределенного типа командная строка не используется. Если сервер определил, что к скрипту обращаются через ISINDEX документ, то поисковый критерий выделяется из URL и преобразуется в параметры командной строки. При этом знаком разделения параметром является символ "+". Тип запроса определяется по наличию или отсутствию символа "=" в запросе. Если этот символ есть, то запрос не является запросом ISINDEX, если символа нет, то запрос принадлежит к типу ISINDEX. Параметры, выделенные из запроса, помещаются в argv[1...]. При этом после из выделения происходит преобразование всех шестнадцатеричных символов в их ASCII коды. Если число параметров превышает ограничения, установленные в командном языке, например в shell, то формирования командной строки не происходит и данные передаются только через QUERY_STRING. Вообще говоря, следует заранее подумать об объеме данных, передаваемом скрипту, и выбрать соответствующий метод доступа. Размер переменных окружения тоже не безграничен, и если необходимо передавать много данных, то лучше сразу выбрать метод POST, т.е. передачу данных через стандартный ввод.


