|
|||||
| Хостинг | Тарифы | Домены | Как заказать | Оплата | Партнерам | Справка | Контакты | Регистрация | Управление | ||||
| справка >> руководства >> CGI | |||||
|
Хостинг Домены Сайты Как заказать Оплата услуг Справка Начинаем работу Загрузка файлов Заказы и платежи Управление сайтами Почта Управление доменами Организационные вопросы Партнер Скрипты, базы данных Доступ по SSH Руководства .htaccess, SSI SSI CGI Perl SSH SSL Parser PHP FTP MySQL Расписание Поиск по сайту Ошибки HTTP Рекомендуемое п/о О компании Партнерам Новости |
CGI - Common Gateway InterfaceCGI - Common Gateway Interface является стандартом интерфейса (связи) внешней прикладной программы с информационным сервером типа HTTP, Web сервер. Обычно гипертекстовые документы, извлекаемые из WWW серверов, содержат статические данные. С помощью CGI можно создавать CGI-программы, называемые шлюзами, которые во взаимодействии с такими прикладными системами, как система управления базой данных, электронная таблица, деловая графика и др., смогут выдать на экран пользователя динамическую информацию. Программа-шлюз запускается WWW сервером в реальном масштабе времени. WWW сервер обеспечивает передачу запроса пользователя шлюзу, а она в свою очередь, используя средства прикладной системы, возвращает результат обработки запроса на экран пользователя. Программа-шлюз может быть закодирована на языках C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script. Как выполнимый модуль, она записывается в поддиректорий с именем cgi-bin WWW сервера. Оригинал описания CGI интерфейса - инструмента связи программы-шлюз с WWW сервером находится в узле wist.ifmo.ru. Передача данных шлюзамДля передачи данных об информационном запросе от сервера к шлюзу, сервер использует командную строку и переменные окружения. Эти переменные окружения устанавливаются в тот момент, когда сервер выполняет программу шлюза.
Запросы для различных методовИнформация шлюзам передается в следующей форме: имя=значение&имя1=значение1&..,где имя- имя переменной, и значение - ее реальное значение. В зависимости от метода, который используется для запроса, эта строка появляется или как часть URL, или как содержимое HTTP запроса. В последнем случае, эта информация будет послана шлюзу в стандартный поток ввода. На файловый дескриптор стандартного потока ввода посылается Пример: Возьмем результат работы формы с методом Пусть получено 7 байт, закодированных примерно так: a=b&b=c.В этом случае, сервер установит значение Аргументы командной строкиШлюз в командной строке от сервера получает:
Ключевые слова, имена полей формы и значения передаются раскодированными (из HTTP URL формата кодирования) и перекодированными в соответствии с правилами кодирования Bourne shell, так что шлюз в командной строке получит информацию в том виде, как она есть, без необходимости осуществлять дополнительные преобразования. Запросы оператора FORMЗапросы оператора FORM обрабатываются таким образом, что каждый параметр, отвечающий за имя поля, оканчивается знаком равенства, а остаток представляет собой значение этого параметра. Если присутствует что либо после имени скрипта (шлюза), то эта информация передается в качестве первого параметра. Иначе первый параметр будет пуст. Примеры: /htbin/foo/x/y/z?name1=value1&name2=value2вызывается как: /.../foo /x/y/z name1= value1 name2= value2а /htbin/foo?name1=value1&name2=value2вызывается как: /.../foo '' name1= value1 name2= value2CGI переменные окруженияСледующие переменные окружения не являются специфичными по типу запросов и устанавливаются для всех запросов.
Следующие переменные окружения являются специфичными для разных запросов, и заполняются перед вызовом шлюза:
В дополнение к этим, если запрос содержит дополнительные поля заголовка запроса, они помещаются в переменные окружения с префиксом HTTP_, за которым следует имя заголовка. Любые символы '-' в заголовке меняются на символы подчеркивания '_'. Сервер может исключить любые заголовки, которые он уже обработал, такие как Authorization, Content-type, и Content-length. Если необходимо, сервер может исключить любые (или вообще все) дополнительные поля заголовка в случае, когда их включение может привести к превышению предела размера переменных окружения. Примером такой переменной может служить переменная
Вывод информации шлюзомОсновные концепции Шлюз осуществляет свой вывод в стандартный поток вывода. Этот вывод может представлять собой или документ, сгенерированный шлюзом, или инструкции серверу, где получить необходимый документ. Как правило, шлюз производит свой вывод, который интерпретируется и посылается обратно клиенту. Преимущество этого подхода состоит в том, что шлюз не должен посылать полный HTTP/1.0 заголовок на каждый запрос. Заголовок выходного потока Для некоторых шлюзов может быть необходимо избегать обработки сервером их вывода, и общаться с клиентом непосредственно. Для того, чтобы отличить такие шлюзы от остальных, CGI требует, чтобы их имена начинались с префикса nph-. В этом случае, на шлюзе лежит ответственность за возвращение клиенту синтаксически правильного ответа. Заголовки с синтаксическим разбором Вывод шлюза начинается с маленького заголовка. Он содержит текстовые строки, в том же формате, как и в HTTP заголовке и завершается пустой строкой (содержащей только символ перевода строки или CR/LF). Любые строки заголовка, не являющиеся директивами сервера, посылаются непосредственно клиенту. В настоящий момент, CGI спецификация определяет три директивы сервера:
Если аргументом является URL, то сервер передаст клиенту указание на перенаправление запроса. Если аргумент представляет собой виртуальный путь, сервер вернет клиенту заданный этим путем документ, как если бы клиент запрашивал его непосредственно.
Примеры Предположим, имеется некоторый текстовый конвертер в HTML. Когда он оканчивает свою работу, он должен произвести следующий вывод в стандартный выходной поток: --- начало вывода ---Content-type: text/html--- конец вывода ---Теперь рассмотрим шлюз, который, в некоторых случаях, должен выдать документ В этом случае вывод шлюза будет таков: --- начало вывода ---Location: /path/doc.txt--- конец вывода ---Наконец, предположим, что шлюз возвращает ссылки на gopher сервер, например на Вывод шлюза будет следующий: --- начало вывода ---Location: gopher://gopher.ncsa.uiuc.edu/--- конец вывода ---Non-parsed headersДопустим теперь, что у нас имеется шлюз, который общается с клиентом непосредственно. Как уже отмечалось, его имя должно начинаться с префикса nph- и он должен возвращать допустимый HTTP заголовок. В этом случае, если доступ к шлюзу был осуществлен со значением SERVER_PROTOCOL равным HTTP/1.0, его вывод должен удовлетворять HTTP/1.0: --- начало вывода ---HTTP/1.0 200 OKServer: NCSA/1.0a6Content-type: text/plain--- конец вывода --- |
|
|||||
| © 2002-2009 ООО "АЙХО Нетворкс" | Хостинг IHO.RU | Санкт-Петербург | лицензия на телемат. уcлуги N 33942 | карта сайта | обратная связь | |||||||