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