CGI.ppt
- Количество слайдов: 30
CGI Common Gateway Interface (общий интерфейс шлюза)
Спецификация Common Gateway Interface Данная спецификация определяет стандартный способ обмена данными между прикладной программой и HTTP-сервером. Является основным средством расширения возможностей обработки запросов клиентов HTTP-сервером. Основное назначение CGI — обработка данных из HTML-форм. В настоящее время область применения CGI гораздо шире.
Понятие CGI-скрипта CGI-скриптом называют программу, написанную на любом языке программирования или командном языке, которая осуществляет обмен данными с HTTP-сервером в соответствии со спецификацией Common Gateway Interface. Типы запросов Выделяют методы GET и методы POST. Запросы по методу GET подразделяются на запросы по типам кодирования: isindex и form-urlencoded, а запросы по методу POST — multipart/form-data и form-urlencoded. В запросах по методу GET данные от клиента передаются скрипту в переменной окружения QUERY_STRING. В запросах по методу POST данные из формы передаются в потоке стандартного ввода скрипта. Запрос типа ISINDEX — это запрос вида: http: //intuit. ru/somthing-cgi/cgi-script? word 1+word 2+word 3 Запрос типа form-urlencoded — это запрос вида: http: //intuit. ru/somthing-cgi/cgiscript? field=word 1&field 2=word 2 При обращении к скрипту по методу POST данные будут направлены в поток стандартного ввода скрипта.
Механизмы приема данных скриптом Скрипт может принять данные от сервера тремя способами: 1. через переменные окружения; 2. через аргументы командной строки; 3. через поток стандартного ввода.
Переменные окружения При вызове скрипта сервер создает среду выполнения скрипта, определяя ее переменные. В спецификации CGI определены 22 переменные окружения. При обращении к скрипту разными методами и из различных контекстов реальные значения принимают разные совокупности этих переменных. При обращении по методу POST переменная QUERY_STRING не имеет значения, а по методу GET — имеет. Переменная окружения HTTP_REFERER. При переходе по гипертекстовой ссылке она определена, а если перейти по значению поля location или через Java. Script-программу, то HTTP_REFERER определена не будет.
Переменные окружения CGI REQUEST_METHOD – Это одна из самых главных переменных используемая для определения метода запроса HTTP. Пример: REQUEST_METHOD=GET QUERY_STRING - Это строка запроса при методе GET. Пример: QUERY_STRING= name=Vasya&age=19&hobby=games CONTENT_LENGTH - Длина в байтах тела запроса. Соответствует полю Content-Length в протоколе HTTP. Пример: CONTENT_LENGTH=31 CONTENT_TYPE - MIME тип тела запроса (для форм кодированых выше указаным образом он application/x-www-form-urlencoded ). Соответствует полю Content-Type в HTTP протоколе
Переменные окружения CGI GATEWAY_INTERFACE - Версия протокола CGI. Пример: GATEWAY_INTERFACE=CGI/1. 1 REMOTE_ADDR - IP-Адрес клиента , делающего данный запрос. Пример: REMOTE_ADDR=192. 168. 3. 1 REMOTE_HOST - Если запрашивающий клиент имеет доменное имя, то эта переменная содержит его, в противном случае - тот же самый IP-адресс что и в REMOTE_ADDR Пример: REMOTE_HOST=vspu. ac. ru SCRIPT_NAME - Имя скрипта, использованое в запросе. Для получения реального пути на сервере используйте SCRIPT_FILENAME. Пример: SCRIPT_NAME=/cgi/guestbook. cgi
Переменные окружения CGI SERVER_NAME - Имя серера , чаще всего доменное как www. microsoft. com , но в редких случаях за неимением такового может быть IP-адресом как 192. 168. 3. 1 Пример: SERVER_NAME=www. vologda. ru SERVER_PORT - TCP-Порт сервера используюшийся для соединения. По умолчаниию HTTP-порт 80, хотя может быть в некоторых случаях быть другим. Пример: SERVER_PORT=80
Переменные окружения CGI SERVER_PROTOCOL - Версия протокола сервера. Пример: SERVER_PROTOCOL=HTTP/1. 1 SERVER_SOFTWARE - Програмное обеспечение сервера. Пример: Apache/1. 0 AUTH_TYPE, REMOTE_USER - Эти переменные определены в том случае, когда запрошеный ресурс требует аутентификации пользователя.
Переменные заголовка HTTP-запроса За исключением тех строк из заголовка HTTPзапроса, которые уже названы, сервер приделывает строкам префикс HTTP_ и заменяет знаки '-' на '_‘. HTTP_ACCEPT - cписок тех MIME, которые браузер готов принять в качестве ответа от сервера. Пример: HTTP_ACCEPT=text/html, text/plain, i mage/gif
Переменные заголовка HTTP-запроса HTTP_USER_AGENT - браузер обычно посылает на сервер информацию о себе. Пример: HTTP_USER_AGENT=Mozila/4. 01 Gold(Win 95; I) CGI-скрипт получает доступ к значениям этих переменых через функции операционной системы (в разных операционных системах это реализуется по разному), тем самым CGI-скрипт получает исчерпывающую информацию об HTTPзапросе.
Аргументы командной строки У CGI-скрипта может быть такой элемент операционного окружения как командная строка. Получить доступ к содержанию командной строки скрипта можно с помощью тех же функций, что и при вызове его из-под интерактивной оболочки. Аргументы командной строки появляются только в запросах типа ISINDEX.
Поток стандартного ввода Ввод данных в скрипт через поток стандартного ввода осуществляется только при использовании метода доступа к ресурсу (скрипту) POST. При этом в переменную окружения CONTENT_LENGTH помещается число символов, которое необходимо считать из потока стандартного ввода скрипта, а в переменную окружения CONTENT_TYPE помещается тип кодирования данных, которые считываются из потока стандартного ввода.
Механизм генерации отклика скриптом Существует только один способ вернуть данные серверу и, соответственно, браузеру пользователя — писать в поток стандартного вывода (STDOUT). При этом скрипт должен формировать HTTP-сообщение. Должен обязательно присутствовать CGIзаголовок (CGI-Header). В CGI-заголовоке могут быть следующие поля: Content-Type: – должно обязательно присутствовать, если есть тело ответа. Определяет MIME-тип ответа. Например: Content-Type: text/html
Механизм генерации отклика скриптом Location: - Должно содержать URL – ресурса на который перенаправляется запрос, в этом случае больше ничего не указывается. Например: Location: http: //www. test 1. ru/index. html Status: - Содержит код завершения работы CGIскрипта. Например: Status: 404 Not found Далее после CGI заголовка на STDOUT посылается пустая строка, которая отделяет заголовок от тела ответа. И после ее посылается собственно тело ответа тип которого был указан в Content-Type (рисунок, текст HTML или другое). Web-сервер получив через STDOUT информацию поступившую от CGI-скрипта формирует на базе ее HTTP-ответ который и посылается клиенту.
Механизм генерации отклика скриптом Если скрипт начинает формирование заголовка с директивы версии HTTPпротокола, то сервер не анализирует отклик и передает его как есть. Если в заголовке, сгенерированном скриптом, эта директива отсутствует, то сервер считает, что заголовок неполный, и вставляет в него дополнительные директивы.
NPH – скрипты Следует сказать что CGI-скрипт может сам без участия Web-сервера сформировать полностью HTTP-ответ. Такие CGI-скрипты называются - Non-Parsed -Headers , и как отличие их имена должны начинаться с приставки – “nph-” или для Windows – ориентированных Web-серверов первая помещаемая в STDOUT строка должна быть такая “HTTP/1. 0” , т. е. версия протокола HTTP, тогда сервер будет считать что данный CGIскрипт будет nph CGI – скриптом.
Передача параметров CGI-скрипту Синтаксис: <URL-скрипта> ? Param 1&Param 2=value&Param +2 b%20%5 B%5 C%5 D%5 E , где ? – означает что дальнейшие данные рассматриваются как параметры; & - этим символом параметры отделяются друг от друга; % - после этого символа идет 16 -й код символа; + - определяет пробел;
Передача параметров CGI-скрипту Параметры могуг разбиваться на две части на имя и значение с помощью знак равенства. Параметры в зависимости от метода HTTPзапроса передаются CGI-скрипту (при GET присоединяются к командной строке, а при POST поступают как тело запроса на STDIN скрипта).
Пример № 1
Пример № 1
Пример чтения переменных окружения по имени
Пример чтения переменных окружения по имени
Пример передачи параметров
Пример передачи параметров
Пример передачи параметров
Пример передачи параметров
Пример передачи параметров
Пример чтения всех переменных окружения
Пример чтения всех переменных окружения
CGI.ppt