Переменные окружения | Опции командной строки | Стандартный ввод | Стандартный вывод |
Шлюз -- это 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, т.е. передачу данных через стандартный ввод.