Лекция: Переменные oкpужения
Перечислим список переменных окружения, устанавливаемых сервером для запускаемых шлюзов CGI, независимо от типа запроса.
• SERVER_SOFTWARE — название и версия информационного сервера, который отвечает на запрос и запускает шлюз. Формат переменной таков: имя/версия. Например, эта переменная может иметь такое значение: HTTP/1.1.
• SERVER_NAME — имя Web-сервера, представленное либо в виде DNS-имени, либо в виде IP-адреса (это имя должно совпадать с переданным в запросе адресом URL). Эта информация может оказаться полезной для генерации в программе шлюза адресов URL данного сервера. Вот пример значения этой переменной: www.anyserver.com
• GATEWAY_INTERFACE — версия спецификации CGI, использованной на момент, когда компилировался сервер. Формат переменной таков: CGI/версия. Вот пример значения этой переменной: CGI/1.1.
Перечисленные выше переменные окружения являются специфичными для разных запросов и заполняются перед запуском CGI-программы шлюза.
А теперь приведем необязательные переменные окружения шлюзов CGI.
• SERVKR_PROTOCOL — имя и версия информационного протокола, использованного в полученном запросе. Формат переменной таков: протокол/версия. Например, эта переменная может иметь такое значение: HTTP/1.1
• SERVER_PORT — номер порта, на который был послан запрос, например, 80.
• REQUEST_METHOD — метод, который был использован для запроса. Для запросов HTTP 1.1 эти методы перечислены в Приложении С.
• PATH_INFO — дополнительная информация о пути, которую клиентский браузер поместил в конец адреса URL запроса сценария. Например, если указанный в запросе адрес URL имеет вид www.any-site.com/prog/handler.exe/text/dot, то требуемый сценарий называется handler.exe, а в переменную PATH_INFO будет помещено значение "text/dot". Другими словами, доступ к шлюзу может быть осуществлен по виртуальному пути, за которым следует некоторая дополнительная информация. Эта информация и передается в PATH_INFO.
• PATH_TRANSLATED — эта переменная поддерживается лишь отдельными серверами и содержит физический путь к программе-сценарию, полученный преобразованием виртуального пути в адресе URL.запроса. Например, пусть абсолютный физический адрес к корневому каталогу Web-сервера будет /usr/local/etc/httpd/htdocs. Предположим также, что каталог cgi-bin со сценариями находится на первом уровне корневого каталога сервера, т.е. для обращения к нему следует использовать такой виртуальный путь: www.anyserver.com/cgi-bin. Тогда адрес URL запроса сценария www.anyserver.com/cgi-bin/handler сервер преобразует в такое значение PATH TRANSLATED: /usr/local/etc/httpd/htdocs//cgi-bin/handler т.е. виртуальный адрес превращается в физический путь к программе шлюза, составленного согласно файловой системе сервера.
• SCRIPT_NAME — виртуальный путь к шлюзу, который должен выполняться для данного запроса. Это значение можно использовать для получения в программе шлюза адреса URL (с целью, например, отправки его обратно клиентскому браузеру вместе с ответным документом HTML, после чего браузер может применять этот адрес для повторных вызовов шлюза). Вот пример значения этой переменной: /cgi-bin/handler.exe
• QUERY_STRING — информация, следующая за символом "?" в адресе URL, переданного в строке HTTP-запроса данного шлюза. Она не должна быть декодирована никоим образом. Вне зависимости от командной строки эта переменная окружения всегда должна быть установлена при наличии соответствующей информации. Например, пусть полученный в запросе адрес URL будет таков: www.anysite.com/handler7postat-addresss= ivan@email.com&subscribe=on Тогда в переменную QUERY_STRING будет помещено такое значение: postal-address=ivan@email.com&subscribe=on.
• REMOTE_HOST — имя клиентского компьютера, с которого получен запрос. Если сервер не имеет такой информации, он должен установить переменную REMOTE_ADDR, а это поле оставить пустым.
• REMOTE_ADDR — IP-адрес клиентского компьютера, с которого получен данный запрос. Например: 199.23.155.34.
• AUTH_TYPE — если сервер поддерживает идентификацию пользователей и шлюз является защищенным от постороннего доступа, этот специфичный для протокола метод идентификации используется для проверки пользователя. Для доступа по протоколу HTTP 1.1 значения этой переменной определены в документе RFC2616. Переменная может быть равной или так называемой схеме идентификации HTTP (например, "challenge"), или равна NULL.
• REMOTE_USER — используется в случае, когда применяется идентификация пользователей (аналогично предыдущему случаю) для хранения имени пользователя.
• REMOTE_IDENT — если HTTP-сервер поддерживает идентификацию пользователя согласно спецификации RFC931, то эта переменная будет содержать имя пользователя, полученное от Сервера. Эта информация практически бесполезна, поскольку пользователи могут указать для нее любое значение.
• CONTENT_TYPE — для запросов, которые содержат передаваемую на сервер информацию, типа запросов POST и PUT протокола HTTP, здесь содержится MIME-тип этой информации, например, "application/x-www-form-urlenCoded".
• CONTENT_LENGTH — объем данных, которые передает клиент. Если запрос включает информацию, переданную по методу POST, этой переменной присваивается значение, равное числу байтов данных во входном потоке шлюза обработки данных.
• НТТР_АССЕРТ — список типов содержимого (MIME-типов), которые может обрабатывать клиентский браузер. Этот список поступает от самого клиентского браузера. Каждый тип содержимого в этом списке должен быть отделен запятой согласно спецификации HTTP. Формат этой переменной таков: тип/подтип, тип/подтип… Вот пример такого списка: image/gif, image/x-xbitmap, image/jpeg
• HTTP_USER__AGENT — имя клиентского браузера, пославшего данный запрос. Общий формат переменной таков: программа/версия библиотека/версия. Вот пример значения этой переменной: Netscape/4.6 (win2000)