|
|||||||||
Автор: Андрей Черный При запуске CGI-скрипта веб-сервер передает ему целый ряд параметров в переменных среды. Часть переменных среды генерируется веб-сервером, а другая часть формируется из полей HTTP-запроса. В "Спецификации CGI/1.1" описан стандартный набор переменных среды CGI, формируемых веб-сервером, а также способ передачи CGI-скрипту полей HTTP-запроса в переменных среды. Кроме того, ряд веб-серверов (включая Apache) помимо стандартных формируют свои переменные, в которых передают скрипту дополнительные ("нестандартные") параметры (E-Mail администратора сервера и т.п.). Здесь рассмотрены как стандартные переменные среды CGI, так и переменные, формируемые сервером Apache.
Переменные среды CGI на конкретном хостинге.Чтобы увидеть все доступные CGI-скрипту переменные среды на конкретном сервере, Вы можете запустить на нем CGI-скрипт, выводящий имена и значения всех своих переменных среды:
#!/usr/bin/perl print "Content-Type: text/html\n\n"; 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-скрипта
следующий: Таким образом, значение поля 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 - список поддерживаемых методов сжатия ответа. HTTP_ACCEPT_CHARSET - список поддерживаемых кодировок текста (через запятую, в порядке предпочтения). HTTP_CONNECTION - желаемый браузером режим работы соединения: Keep-Alive (после ответа на запрос сервер не разрывает соединения) и Close (сервер разрывает соединение после ответа на запрос). HTTP_REFERER - значение поля Referer HTTP-запроса. В этом поле браузер передает URL ресурса, по ссылке с которого был запрошен данный ресурс.
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'. Автор: Андрей Черный
|
|||||||||
![]() |
![]() |