» Форма входа

»Мoy-weB ver.4.1

» Статистика

Главная » 2008 » Сентябрь » 20 » Переменные среды CGI

Переменные среды CGI
20.Сен.2008 | 18:54:20

Переменные среды CGI


При запуске CGI-скрипта веб-сервер передает ему целый ряд параметров в
переменных среды. Часть переменных среды генерируется веб-сервером, а
другая часть формируется из полей HTTP-запроса.

В
"Спецификации CGI/1.1" описан стандартный набор переменных среды CGI,
формируемых веб-сервером, а также способ передачи CGI-скрипту полей
HTTP-запроса в переменных среды. Кроме того, ряд веб-серверов (включая
Apache) помимо стандартных формируют свои переменные, в которых
передают скрипту дополнительные ("нестандартные") параметры (E-Mail
администратора сервера и т.п.).

Здесь рассмотрены как стандартные переменные среды CGI, так и переменные, формируемые сервером Apache.

Переменные среды CGI на конкретном хостинге.


Чтобы
увидеть все доступные CGI-скрипту переменные среды на конкретном
сервере, Вы можете запустить на нем CGI-скрипт, выводящий имена и
значения всех своих переменных среды:


#!/usr/bin/perl
print "Content-Type: text/htmlnn";
print
"<HTML>n<HEAD></HEAD><BODY>
<TABLE width=100% border=1 bordercolor=#00007F cellspacing=0>
<TR><TD align=center>Переменная</TD><TD align=center>Значение</TD></TR>n"
;

foreach
$itm(keys %ENV)
{print
"<TR><TD>$itm</TD><TD>$ENV{$itm}</TD></TR>n";}
print
"</TABLE></BODY></HTML>n";


В зависимости от условий вызова
(HTTP-метод, прямой или через SSI...) набор переменных может быть
различным, поэтому попробуйте вызывать этот скрипт различными путями и
смотрите результаты работы.
Переменные среды CGI, формируемые веб-сервером.

QUERY_STRING - строка параметров вызова (все символы, записанные в URL после знака '?').

REQUEST_METHOD
- метод HTTP, с помощью которого вызван скрипт. Чаще всего это методы
GET или POST, хотя в принципе могут быть и другие (PUT, DELETE и т.п.).

GATEWAY_INTERFACE - версия интерфейса CGI в виде CGI/x.y. Например, CGI/1.1

REMOTE_ADDR
- содержит IP-адрес компьютера, с которого произошло обращение к
веб-серверу (адрес клиента либо последнего прокси-сервера).

REMOTE_PORT - TCP-порт удаленного компьютера, с которого идет запрос.

REMOTE_HOST
- доменное имя удаленного компьютера, с которого идет запрос
(определяется веб-сервером через DNS по значению REMOTE_ADDR, если это
разрешено его конфигурацией).

SERVER_NAME - доменное имя сервера.

SERVER_PORT - номер TCP-порта веб-сервера.

SERVER_ADDR - IP-адрес сервера.

SERVER_PROTOCOL - версия HTTP-протокола, используемая для данного HTTP-запроса. Например, HTTP/1.1.

SERVER_SOFTWARE - программное обеспечение сервера.

SCRIPT_NAME - HTTP-путь к скрипту.

SCRIPT_FILENAME - физический полный путь к скрипту в файловой системе сервера.

PATH_INFO - HTTP-путь к скрипту.

PATH_TRANSLATED - полный физический путь к скрипту.

Если
используемый для запроса HTTP-метод предусматривает передачу
содержимого в теле запроса, то передаются следующие переменные:

CONTENT_TYPE - тип содержимого (MIME).

CONTENT_LENGTH - длина содержимого

Если произошел аутентифицированный запрос (с указанием имени пользователя и пароля), то передаются переменные:

AUTH_TYPE - тип аутентификации (используемая аутентификационная схема). Чаще всего - 'Basic'.

REMOTE_USER - имя пользователя, прошедшего аутентификацию.

Если
скрипт рассчитан на обслуживание нескольких пользователей, по параметру
REMOTE_USER он может их различать. Следует иметь в виду, что если
CGI-скрипт уже запущен и ему передан параметр REMOTE_USER, то
пользователь УЖЕ успешно прошел аутентификацию на уровне веб-сервера
Переменные CGI-среды Apache

Веб-сервер Apache, в зависимости от версии, может передавать дополнительные переменные, в часности, такие:

DOCUMENT_ROOT - физический путь к корневому WWW-каталогу сервера.

SERVER_ADMIN - E-Mail адрес администратора сервера.

Может
использоваться, например, для отправки администратору письма через
программу sendmail или в выводе сообщения об ошибке: если ошибка носит
непредвиденный характер, скрипт может посоветовать пользователю сайта
обратиться к администратору по "такому-то" E-Mail.

SERVER_SIGNATURE
- подпись к страницам, сгенерированным сервером (листингам, сообщениям
об ошибке). Например: Apache/1.3.3 Server at takoi-to.host.com Port 80

Может
использоваться скриптом для "эмуляции" определенной ошибки. Например,
если к скрипту обратиться с неправильными параметрами, то можно скрыть
сам факт существования такого скрипта, выдав сообщение "Not Found".

Преобразование HTTP-полей запроса в переменные среды

Способ преобразования имен HTTP-полей запроса в имена переменных среды CGI-скрипта следующий:
1. все символы переводятся в верхний регистр;
2. символы '-' заменяются на '_';
3. в начале имени переменной добавляется 'HTTP_'.

Таким
образом, значение поля HTTP-запроса Connection записывается в
переменную среды HTTP_CONNECTION, а значение поля Accept-Language - в
переменную HTTP_ACCEPT_LANGUAGE.

Надо сказать, что в большинстве случаев не все поля HTTP-запроса передаются CGI-скрипту.

HTTP_HOST - имя хоста, к которому идет обращение. Удобно, если скрипт обслуживает несколько виртуальных хостов.

HTTP_USER_AGENT - программное обеспечение клиента, сделавшего запрос. Например, Mozilla/4.7 [en] (Win95; I).

HTTP_ACCEPT - список поддерживаемых клиентом типов содержимого (через запятую, в порядке предпочтения).

HTTP_ACCEPT_LANGUAGE
- список поддерживаемых браузером языков в виде двухбуквенных
наименований (через запятую), например: ru,en. Удобно, если скрипт
может выдавать ответы на нескольких языках (скажем, для русскоязычных и
англоязычных посетителей сайта).

HTTP_ACCEPT_ENCODING - список поддерживаемых методов сжатия ответа.
Например: gzip,deflate.

HTTP_ACCEPT_CHARSET - список поддерживаемых кодировок текста (через запятую, в порядке предпочтения).

HTTP_CONNECTION
- желаемый браузером режим работы соединения: Keep-Alive (после ответа
на запрос сервер не разрывает соединения) и Close (сервер разрывает
соединение после ответа на запрос).

HTTP_REFERER - значение поля
Referer HTTP-запроса. В этом поле браузер передает URL ресурса, по
ссылке с которого был запрошен данный ресурс.

*

Если
пользователь переходит по ссылке со страницы A на страницу B, то в поле
Referer HTTP-запроса страницы B будет URL страницы A.
*

Для
картинок, внешних JavaScript и др. ресурсов, вставляемых в страницу, в
поле Referer передается URL страницы, в которую они вставлены.
*


Для ресурсов-скриптов, вставленных через SSI, в переменной HTTP_REFERER
передается то же, что и для страницы, куда они вставлены.

HTTP_X_FORWARDED_FOR
- если пользователь работает через прокси-сервер, то последний
формирует поле X-Forwarded-For, в котором указывает IP-адрес, с
которого идет запрос к прокси. Если поле X-Forwarded-Forуже существует
в запросе прокси-серверу, то он добавляет к уже существующему полю
новое значение через запятую. Таким образом, если клиент работает
"каскадно" через несколько прокси-серверов, то первый прокси-сервер
создаст поле X-Forwarded-For с IP клиента, а каждый последующий
прокси-сервер добавит к уже существующему полю X-Forwarded-For адрес
предыдущего прокси через запятую.

Таким образом, можно отследить
всю цепочку каскадно включенных прокси- серверов, если, конечно, ни
один из них не является "анонимным".

При этом надо иметь в виду,
что IP-адрес работающего через прокси клиента может и не принадлежать
Интернету, если клиент работает из локальной сети. Обычно для локальных
сетей используются адреса вида 172.16.x.y.
Переменные среды, передаваемые CGI-скрипту, вызванному через SSI.

CGI-скрипту, вызванному через SSI, сервером Apache передаются также дополнительные переменные среды:

QUERY_STRING_UNESCAPED
- параметры вызова не самого скрипта, а содержащей его веб-страницы.
Все escape-последовательности вида %xx уже заменены на символы. В
переменной QUERY_STRING, как обычно, передаются параметры вызова самого
скрипта в SSI-директиве. Таким образом, CGI-скрипт, вызванный через
SSI, может обрабатывать параметры вызова содержащей его HTML-страницы,
если они есть.

REQUEST_URI - HTTP-путь к веб-странице, содержащей SSI-директиву вызова скрипта.

DOCUMENT_NAME - имя файла документа (веб-страницы), в которую вставляется результат работы скрипта.

DOCUMENT_URI - HTTP-путь к веб-странице, вызвавшей этот скрипт.

LAST_MODIFIED - дата последнего изменения документа, в который вставлен результат работы этого скрипта.

DATE_LOCAL и DATE_GMT - соответственно местные дата-время и дата-время по Гринвичу.

Для CGI-скриптов, вызванных через SSI, переменная SERVER_PROTOCOL имеет значение 'INCLUDED'.
Категория: Статьй и уроки | Просмотров: 491 | Добавил: CorsaR
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]