« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга

Тестирование 64-битных приложений

ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
    Популярное
FAQ по работе со строками

Обработка исключений

Защита от Cross-Site Scripting атаки в ASP.NET

Динамические SELECT-ы на JavaScript или Организация выбора даты в форме

Управляющие элементы

Технологии и средства доступа к реляционным базам данных. ADO.NET

register_globals=oN? Вы в опасности!

Функция RegisterClipboardFormat

Основные сведения о наборах данных

Функция OffsetWindowOrg




    Архив файлов



    Сообщества



    Документация

Статьи:: Интернет технологии :: CGI :: Переменные среды CGI


отправить ссылку другу версия для печати  Обсудить на форуме

Переменные среды 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'.

(c) Андрей Черный
angel07@inbox.ru




Рубрика: CGI




Инструменты Internet Explorer 8 Beta 2 для разработчиков.

Вебмастеру

В марте этого года мы уже писали об инструментах для разработчика в IE8 Beta 1, но IE8 Beta2 позволяет более полно использовать инструменты за счет значительных изменений в имеющихся функциях, а также новых возможностей. В принципе инструменты для разработчика должны обладать следующими свойствами: Быть интегрированными и простыми в использовании; Иметь визуальный интерфейсC их помощью можно быстро протестировать сайт.


Подробнее... | Рубрика: Вебмастеру | Добавлено: 05.09.2008

Google Developer Day 2008 в Москве.

Мероприятия

Дата проведения: 28 октября 2008 г.; Место проведения: Амбер Плаза, Москва, Россия. Конференция для веб-разработчиков и разработчиков мобильных приложений в Москве. Узнайте, как наилучшим образом использовать инструменты разработки и API от Google, чтобы создавать социальные, мобильные и картографические приложения, как использовать AJAX/JavaScript инструменты и библиотеки от Google и многое другое из первых уст.


Подробнее... | Рубрика: Мероприятия | Добавлено: 05.09.2008

ТОП 10 самых раздражающих факторов для программиста.

Разное

Совсем недавно наткнулся в интернете на забавный "хит-парад" наиболее раздражающих вещей для программиста. Поскольку он был на английском — решил перевести текст и несколько адаптировать к нашим реалиям…


Подробнее... | Рубрика: Разное | Добавлено: 03.09.2008

Остальные статьи:

Windows Server 7, 8 и 9
jQuery для JavaScript-программистов
Инновационный веб-броузер Google Chrome стартует уже сегодня
Windows 7: подход к производительности системы
Trac + Subversion @ Ubuntu: Revisited
[g]Vim в режиме Python: Рекомпиляция в Windows
Java + JSON. Пути к дружбе
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения


Цитата дня (все,добавить):



    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование

Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 100
Пользователей: 0