Опубликован: 24.11.2006 | Доступ: свободный | Студентов: 716 / 33 | Оценка: 4.46 / 4.54 | Длительность: 17:18:00
Лекция 5:

Расширения ISAPI

Значения серверных переменных

Возможные значения запрашиваемых серверных переменных приведены в листинге 5.3 в коде функции HttpExtensionProc в расширении ISAPI SEUX ; они являются аргументами в вызовах GetECBElement. Значения серверных переменных могут изменяться в процессе текущего события запроса HTTP в IIS, и зачастую переменной не присваивается значение. Серверные переменные содержат значения только при определенных настройках IIS. В таблице 5.2 приведены серверные переменные, запрашиваемые с помощью функции GetServerVariable.

Таблица 5.2. Обзор переменных сервера, запрашиваемых функцией GetServerVariable
Константа ошибки Описание ошибки
ERROR_INVALID_PARAMETER Значение hConn является некорректным или закрытым, либо неверны параметры серверной переменной.
ERROR_INVALID_INDEX Запрашиваемая серверная переменная не поддерживается.
ERROR_INSUFFICIENT_BUFFER Размер lpdwSizeofBuffer слишком мал для содержания значения запрашиваемой серверной переменной.
ERROR_NO_DATA Запрашиваемая серверная переменная недоступна.
ALL_HTTP Все HTTP-заголовки (разделены символами новой строки), переданные в запросе HTTP в строке с символом конца строки. Заголовки имеют вид <имя заголовка> : <значение>.
ALL_RAW Все заголовки HTTP в том виде, в котором они были отправлены запрашивающей HTTP-стороной.
APPL_MD_PATH Путь метабазы веб-приложения. Например, /LMW3SVC/1/Root/SimpleISAPI.
APPL_PHYSICAL_PATH Физический путь корневого веб-каталога для веб-приложения. Например: C:\ISAPI\.
AUTH_PASSWORD Пароль, вводимый веб-пользователем в диалоговом окне аутентификации браузера, если установлена базовая аутентификация.
AUTH_TYPE Используемый тип аутентификации. Пустое значение при отсутствии аутентификации либо значение, соответствующее Kerberos, пользовательской аутентификации, SSL/PCT, базовой или интегрированной аутентификации Windows.
AUTH_USER Имя пользователя, вводимое пользователем в диалоговом окне аутентификации браузера в случае, если установлена базовая аутентификация.
CERT_COOKIE Уникальный идентификатор сертификата клиента.
CERT_FLAGS Битовые флаги бюро сертификатов (CA) сертификата клиента. Если bit0 равен 1, то CA отсутствует в списке распознаваемых бюро сертификатов данного сервера и признается недействительным.
CERT_ISSUER Содержит имя сертификата клиента. Например, O=Schmidlaps, OU=House, CN= имя пользователя, C=USA.
CERT_KEYSIZE Размер ключа в битах при соединении SSL.
CERT_SERCRETKEYSIZE Размер секретного ключа сертификата сервера в битах.
CERT_SERIALNUMBER Серийный номер сертификата клиента.
CERT_SERVER_ISSUER Подробное имя издателя сертификата сервера.
CERT_SERVER_SUBJECT Подробное имя субъекта сертификата сервера.
CERT_SUBJECT Субъект сертификата клиента.
CONTENT_LENGTH Количество байт, исключая заголовки HTTP-запроса.
LOGON_USER Если конечный пользователь успешно аутентифицировался в Windows, используется учетная запись входа в систему.
HTTPS Возвращает значение off, если в HTTPS не используется SSL, в противном случае возвращается значение on.
HTTPS_KEYSIZE Размер ключа SSL-соединения в битах.
HTTP_SECRETKEYSIZE Размер секретного ключа сертификата сервера в битах.
HTTPS_SERVER_ISSUER Подробное имя издателя сертификата сервера.
HTTPS_SERVER_SUBJECT Подробное имя субъекта сертификата сервера.
INSTANCE_ID Номер экземпляра сервера. Значения идентификатора сервера в метабазе, например, 1.
INSTANCE_META_PATH Путь веб- экземпляра в метабазе, например: LM/W3SVC/1.
PATH_INFO Часть URL, расположенная между ISAPI DLL и началом секции с дополнительной информацией в URL. Как правило, в этом месте нет никаких данных, если запрашивающее ПО не добавляет свое значение.
PATH_TRANSLATED Часть веб-экземпляра, связанная с физическим жестким диском, с конкатенацией значения PATH_INFO.
QUERY_STRING Строка символов, следующих за символом "?" в секции дополнительной информации URL.
REMOTE_ADDR IP-адрес хоста или шлюза запрашивающего ПО.
REMOTE_HOST Имя узла или шлюза запрашивающего ПО, если включен обратный поиск DNS; иначе возвращается значение IP-адреса узла или шлюза запрашивающего ПО.
REMOTE_USER Имя пользователя, осуществляющего HTTP-запрос и аутентифицируемого несущим сервером. Представляет собой пустую строку для анонимного пользователя.
REQUEST_METHOD Команда метода HTTP-запроса.
SCRIPT_NAME Имя исполняемого двоичного файла, например, имя ISAPI DLL или исполняемого файла CGI.
SERVER_NAME Имя узла сервера или IP-адрес.
SERVER_PORT Порт TCP/IP, по которому получен запрос.
SERVER_PORT_SECURE Значение 0 или 1. Запросы по безопасному порту возвращают 1; иначе возвращается 0.
SERVER_PROTOCOL Имя и версия протокола запроса, например, HTTP 1.1.
SERVER_SOFTWARE Имя и версия IIS, под которой выполняется программа DLL расширения ISAPI, например, Microsoft-IIS/6.0.
URL Значение части url-путь адреса URL, исключая значение PATH_INFO. Например: /simpleisapi/folder1/folder2/SEUX.dll.

Для демонстрации значений таблицы 5.2 в листинге 5.5 приведен документ XML, созданный из расширения ISAPI SEUX.DLL. В данном примере несущий сервер и IIS настроены таким образом, что многие значения серверных переменных получаются в процессе HTTP-запроса. Имя несущего узла – amd1700v2. IIS 6 на amd1700v2 настроен с использованием следующих значений параметров и файловых расположений.

  • Физическое расположение расширения ISAPI SEUX.DLL. C:\ISAPI\папка1\папка2\SEUX.dll.
  • Корень веб- экземпляра. C:\inetpub\wwwroot.
  • Связанный виртуальный каталог. C:\ISAPI.
  • Анонимный доступ. Не включен для виртуального каталога.
  • Базовая аутентификация. Включена для виртуального каталога.

Расширение ISAPI SEUX.dll запрошено с amd1700v2 с помощью следующих данных браузера, расположенного на отдельном компьютере.

  • Пользователь, осуществивший вход на веб-сайт под именем normaluser.
  • Пользователь, осуществивший вход на веб-сайт с использованием пароля normaluser.
  • URL в браузере: http://amd1700v2/simpleisapi/folder1/folder2/SEUX.dll/PATH_INFO?parm1=value1&parm2=value
<?xml version="1.0" ?> 
<HTTPRequestRaw>
 <ECBServerVariable>
  <ALL_HTTP HTTP_CONNECTION="Keep-Alive" 
   HTTP_ACCEPT=
 "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, 
application/vnd.ms-powerpoint, application/vnd.ms-excel, 
application/msword, */*" 
   HTTP_ACCEPT_ENCODING="gzip, deflate" 
   HTTP_ACCEPT_LANGUAGE="en-us" 
   HTTP_AUTHORIZATION="Basic bm9ybWFsdXNlcjpub3JtYWx1c2Vy"
   HTTP_COOKIE="ASPCLIENTDEBUG=1" HTTP_HOST="amd1700v2" 
   HTTP_USER_AGENT=
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 
1.0.3705)" /> 
  <AUTH_TYPE>Basic</AUTH_TYPE> 
  <APPL_MD_PATH>/LM/W3SVC/1/Root/SimpleISAPI</APPL_MD_PATH> 
  <APPL_PHYSICAL_PATH>C:\ISAPI\</APPL_PHYSICAL_PATH> 
  <CONTENT_LENGTH>0</CONTENT_LENGTH> 
  <CONTENT_TYPE /> 
  <GATEWAY_INTERFACE>CGI/1.1</GATEWAY_INTERFACE> 
  <HTTP_ACCEPT>image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel, 
application/msword, */*</HTTP_ACCEPT> 
  <HTTPS>off</HTTPS> 
  <HTTP_AUTHORIZATION>
Basic bm9ybWFsdXNlcjpub3JtYWx1c2Vy
  </HTTP_AUTHORIZATION> 
  <LOGON_USER>normaluser</LOGON_USER> 
  <AUTH_PASSWORD>normaluser</AUTH_PASSWORD> 
  <AUTH_TYPE>Basic</AUTH_TYPE> 
  <AUTH_USER>normaluser</AUTH_USER> 
  <APPL_PHYSICAL_PATH>C:\ISAPI\</APPL_PHYSICAL_PATH> 
  <INSTANCE_ID>1</INSTANCE_ID> 
  <INSTANCE_META_PATH>/LM/W3SVC/1</INSTANCE_META_PATH> 
  <PATH_INFO>/PATH_INFO</PATH_INFO> 
  <PATH_TRANSLATED>c:\inetpub\wwwroot\PATH_INFO</PATH_TRANSLATED> 
  <QUERY_STRING>parm1=value1&parm2=value</QUERY_STRING> 
  <REMOTE_ADDR>169.254.176.147</REMOTE_ADDR> 
  <REMOTE_HOST>169.254.176.147</REMOTE_HOST> 
  <REMOTE_USER>normaluser</REMOTE_USER> 
  <REQUEST_METHOD>GET</REQUEST_METHOD> 
  <SCRIPT_NAME>/simpleisapi/folder1/folder2/SEUX.dll</SCRIPT_NAME> 
  <SERVER_NAME>amd1700v2</SERVER_NAME> 
  <SERVER_PORT>80</SERVER_PORT> 
  <SERVER_PORT_SECURE>0</SERVER_PORT_SECURE> 
  <SERVER_PROTOCOL>HTTP/1.1</SERVER_PROTOCOL> 
  <SERVER_SOFTWARE>Microsoft-IIS/6.0</SERVER_SOFTWARE> 
  <URL>/simpleisapi/folder1/folder2/SEUX.dll</URL> 
 </ECBServerVariable>
 <ECBProperties>
  <lpszLogData /> 
  <lpszMethod>GET</lpszMethod> 
  <lpszQueryString>parm1=value1&parm2=value</lpszQueryString> 
  <lpszPathInfo>/PATH_INFO</lpszPathInfo> 
  <lpszContentType /> 
 </ECBProperties>
</HTTPRequestRaw>
Листинг 5.5. SEUX.DLL Output from http://amd1700v2/simpleisapi/folder1/folder2/SEUX.dll/PATH_INFO? parm1=value1&parm2=value