Сервер Web своими руками. Язык HTML, приложения CGI и ISAPI, установка серверов Web для Windows© Александр Фролов, Григорий ФроловТом 29, М.: Диалог-МИФИ, 1997, 288 стр. Переменные среды для программы CGIПрежде чем перейти к примерам программ CGI, мы изучим переменные среды, которые формируются для этих программ перед запуском. Через эти переменные помимо данных из полей форм передается и другая очень важная информация, которую не всегда следует игнорировать. Изучение переменных среды мы начнем с того, что просмотрим их значение с помощью простейшей программы CGI, созданной с использованием языка пакетных заданий операционной системы Microsoft Windows NT, а проще говоря, с помощью обыкновенного файла с расширением имени bat. Для запуска этой “программы” мы подготовили форму, исходный текст которой представлен в листинге 7.2. Листинг 7.2. Файл chap7\viewenv\viewenv.htm <HTML> <HEAD> <TITLE>Просмотр переменных среды</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF> <H1>Просмотр переменных среды</H1> <P>Для просмотра переменных среды, передаваемых программе CGI, нажмите кнопку "View" <FORM METHOD=GET ACTION="http://saturn/frolov-cgi/test.bat?param1"> <INPUT TYPE=SUBMIT VALUE="View"> </FORM> </BODY> </HTML> Форма выглядит так, как это показано на рис. 7.3. Рис. 7.3. Форма для запуска программы CGI просмотра значений переменных среды Обратите внимание, что после имени программы CGI через разделительный символ “?” указана строка параметров param1, которая может быть получена и проанализирована программой CGI. Исходный текст программы CGI приведен в листинге 7.3. Листинг 7.3. Файл chap7\viewenv\test.bat echo Content-type: text/plain echo echo %0 %1 %2 %3 set В первой строке программа выводит в стандартный поток вывода STDOUT строку заголовка HTTP. Эта строка описывает тип передаваемых данных как text/plain, то есть обычный текст без оформления с использованием операторов HTML. Вторая строка выводит в стандартный поток вывода пустую строку, которая отделяет заголовок HTTP от передаваемых данных. Третья строка выводит путь к загрузочному файлу программы CGI и параметры, полученные ей при запуске. И, наконец, в последней строке вызывается команда SET, которая выводит в поток STDOUT значения всех переменных среды, определенных в системе перед запуском программы. Результат работы нашей программы CGI показан на рис. 7.4. Рис. 7.4. Результат работы программы CGI, отображающей значения переменных среды Ниже мы привели полный листинг, полученный при работе нашей программы CGI: g:\iisdir\wwwroot\guest>echo ECHO is on. g:\iisdir\wwwroot\guest>echo g:\iisdir\wwwroot\guest\test.bat param1? g:\iisdir\wwwroot\guest\test.bat param1? g:\iisdir\wwwroot\guest>set AUTH_TYPE= ComSpec=D:\WINNT35\system32\cmd.exe GATEWAY_INTERFACE=CGI/1.1 HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* HTTP_REFERER=file:C:\!websrv\Sample\Chap7\viewenv\viewenv.HTM HTTP_ACCEPT_LANGUAGE=, en HTTP_UA_PIXELS=1024x768 HTTP_UA_COLOR=color16 HTTP_UA_OS=Windows 95 HTTP_UA_CPU=x86 HTTP_USER_AGENT=Mozilla/2.0 (compatible; MSIE 3.0; Windows 95) HTTP_HOST=frolov HTTP_CONNECTION=Keep-Alive CONTENT_LENGTH=0 CONTENT_TYPE= PATH=D:\WINNT35\system32;D:\WINNT35; PATH_INFO=/frolov-cgi/test.bat PATH_TRANSLATED=g:\iisdir\wwwroot\guest\test.bat PROMPT=$P$G QUERY_STRING=param1? REMOTE_ADDR=154.101.200.255 REMOTE_HOST=154.101.200.255 REMOTE_USER= REQUEST_METHOD=GET SCRIPT_NAME=/frolov-cgi/test.bat SERVER_NAME=154.100.100.10 SERVER_PROTOCOL=HTTP/1.0 SERVER_PORT=80 SERVER_SOFTWARE=Microsoft-Internet-Information-Server/1.0 SystemRoot=D:\WINNT35 windir=D:\WINNT35 В этом листинге отображаются переменные среды, определенные специально для программы CGI сервером Microsoft Internet Information Server, а также переменные среды, стандартные для операционной системы Microsoft Windows NT. Рассмотрим по отдельности назначение переменных среды. Заметим, что набор переменных, создаваемых при запуске программы CGI, зависит от конкретной реализации сервера WWW. · · AUTH_TYPE Технология WWW допускает защиту страниц HTML, когда доступ к отдельным страницам предоставляется только для отдельных пользователей при предъявлении пароля. При этом используется так называемая система аутентификации, или проверки подлинности идентификатора пользователя. Переменная среды AUTH_TYPE содержит тип идентификации, который применяется сервером. Например, для сервера WWW типа Microsoft Information Server при включении аутентификации в этой переменной будет храниться строка “NTLM”. · · GATEWAY_INTERFACE В этой переменной находится версия интерфейса CGI, с которой работает данный сервер. В нашем случае интерфейс имеет версию 1.1. · · HTTP_ACCEPT В этой переменной перечислены типы данных MIME, которые могут быть приняты навигатором от сервера WWW. Из приведенного выше листинга видно, что сервер Microsoft Internet Information Server может передать навигатору Microsoft Internet Explorer (который был использован для работы с программой CGI) графические изображения (image) в формате gif, jpeg, pjpeg, x-xbitmap. Подробно эти типы данных описаны в спецификации протокола MIME, рассмотрение которой выходит за рамки нашей книги. · · HTTP_REFER В переменную HTTP_REFER записывается адрес URL документа HTML, который инициировал работу программы CGI. В нашем случае этот документ был записан на локальном диске компьютера в каталоге C:\!websrv\Sample\Chap7\viewenv. · · HTTP_ACCEPT_LANGUAGE Переменная HTTP_ACCEPT_LANGUAGE содержит идентификатор предпочтительного национального языка для получения ответа от сервера WWW. В нашем случае это английский язык, хотя сервер может прислать ответ на любом национальном языке. · · HTTP_UA_PIXELS Разрешение видеоадаптера, установленное в компьютере пользователя. · · HTTP_UA_COLOR Допустимое количество цветов в системе пользователя. · · HTTP_UA_OS Операционная система, под управлением которой работает навигатор. · · HTTP_UA_CPU Тип центрального процессора в компьютере удаленного пользователя. · · HTTP_USER_AGENT В эту переменную записывается имя навигатора, с помощью которого запрашивается документ HTML. Анализируя это имя, программа CGI может принимать решение об использовании тех или иных расширений стандарта языка HTML, допустимого для конкретного навигатора. · · HTTP_HOST Имя узла, на котором работает сервер WWW. · · HTTP_CONNECTION Тип соединения. · · HTTP_ACCEPT_ENCODING Метод кодирования, который может быть использован навигатором для формирования ответа серверу WWW. · · HTTP_AUTHORIZATION Информация авторизации от навигатора. Используется навигатором для собственной аутентификации в сервере WWW. · · HTTP_FROM Имя пользователя в виде, как оно было зарегистрировано при настройке навигатора. Используется формат адресов электронной почты. · · HTTP_PRAGMA Специальные команды серверу WWW. · · CONTENT_LENGTH Количество байт данных, которые программа CGI должна получить от навигатора. · · CONTENT_TYPE Тип данных, присланных навигатором. · · PATH_INFO Путь к виртуальному каталогу, в котором находится программа CGI. Как правило, при настройке сервера WWW администратор выделяет один или несколько каталогов для хранения расширений сервера в виде программ CGI или ISAPI. Для файлов, записанных в такие каталоги, устанавливается доступ на запуск. Администратор создает таблицу соответствия физических каталогов и виртуальных, определяя права доступа к виртуальным каталогам с помощью программы настройки параметров сервера WWW. · · PATH_TRANSLATED Физический путь к программе CGI. · · QUERY_STRING Строка параметров, указанная в форме после адреса URL программы CGI после разделительного символа “?”. · · REMOTE_ADDR Адрес IP узла, на котором работает навигатор удаленного пользователя. · · REMOTE_HOST Доменное имя узла, на котором работает навигатор удаленного пользователя. Если эта информация недоступна (например, для узла не определен доменный адрес), вместо доменного имени указывается адрес IP, как в переменной REMOTE_ADDR. · · REMOTE_USER Имя пользователя, которое используется навигатором для аутентификации. Используется только в том случае, если сервер WWW способен работать с аутентификацией и программа CGI отмечена как защищенная. · · REQUEST_METHOD Метод доступа, который используется для передачи данных от навигатора серверу WWW. В своих примерах мы используем методы доступа GET и POST, хотя протокол HTTP допускает применение и других методов доступа, например, PUT и HEAD. · · SCRIPT_NAME В эту переменную записывается путь к виртуальному каталогу и имя программы CGI. Анализируя эту переменную, программа CGI может определить путь к своему загрузочному файлу. · · SERVER_NAME Доменное имя сервера WWW или адрес IP сервера WWW, если доменное имя недоступно или не определено. · · SERVER_PROTOCOL Имя и версия протокола, который применяется для выполнения запроса к программе CGI. · · SERVER_PORT Номер порта, на котором навигатор посылает запросы серверу WWW. · · SERVER_SOFTWARE Название и версия программного обеспечения сервера WWW. Версия следует после названия и отделяется от последнего символом “/”. · · REMOTE_IDENT Имя, с которым пользователь подключился к серверу WWW. Используется только в том случае, если сервер WWW способен подключать пользователей по именам. |