Описание объекта Request
Описываемый объект является, также как и объект Response, очень полезным и мощным встроенным инструментом. Данный объект ряд методов, коллекций и свойств. Их описание приводится ниже:
Коллекции:
Методы:
Свойства:
Коллекция Request.ClientCertificate |
Коллекция ClientCertificate (Клиентский сертификат - элемент авторизации) позволяет получать поля сертификации (определенные стандартом X.509) из запроса браузера.
Если браузер использует протокол SSL3.0/PCT1 (другими словами используется URL, начинающийся с https:// вместо http://) для подключения к серверу то сервер затребует сертификацию, на что браузер должен будет вернуть поля сертификации.
Если сертификат не был передан, то коллекция ClientCertificate вернет EMPTY (пусто).
Перед тем, как вы сможете использовать ClientCertificate-коллекцию вы должны сконфигурировать свой сервер так, чтобы он требовал клиентский сертификат.
Синтакс:
Request.ClientCertificate( ключ [подполе] )
Параметры:
ключ
Указанное имя поля сертификата, которое вы хотите получить. Клиентский сертификат содержит следующие поля:
Значение Описание Certificate Строка, содержащая двоичный поток всего содержимого сертификата в формате ASN.1 Flag Множество флажков, которые предоставляют дополнительныю информацию о клиентском сертификате. Следующее количество флажков определено: ceCertPresent - клиентский сертификат предоставлен (имеется).
ceUnrecognizedIssuer - последняя сертификация в данной цепи получена от неизвестного издателя. Т.е. не ясно, кто издал (подписал) сертификат.
Замечание: Для того, чтобы получить данные флажки, вы должны включить включаемый файл сертификата клиента в ваш ASP-файл. Если вы используете VBScript, подключите файл cervbs.inc, в случае с JavaScript - подключите файл cerjavas.inc. Эти файлы инсталируются в папку \InetPub\ASPSamp\Samples.
Issuer Строка, содержащая список подполей, содержащих информацию о издателе сертификата. Если это значение указано (задано вами при вызове) без подполей, то колекция ClientCertificate возвратит вам список подполей со значениями, разделенный запятыми. К примеру: C=US, O=Verisign и так далее. SerialNumber Строка, содержащая серийный номер сертификата в виде ASCII строки, представленной в виде шестнадцатиричных байт, разделенных тире. К примеру 04-67-А3-С7 Subject Строка, которая содержит список значений подполей, которые в свою очередь содержат информацию о объекте авторизации (о персоне). Если это значение указано без подполей, то ClientCertificate-коллекция вернет список подполей, разделенный запятой, к примеру C=US, O=Msft и так далее. ValidFrom Дата, указывающая на то, когда сертификат прошел подписание. Эта дата соответствует VBScript - формату и зависит от региональных установок. К примеру это (для USA) 9/26/96 11:59:59 pm ValidUntil Дата, указывающая на то, когда истечет срок действия указанного сертификата.
подполе
не обязательный параметр, который вы можете использовать для получения индивидуальных полей в каждом из Subject или Issuer ключах. Этот параметр добавляется к параметру ключ как суффикс. К примеру - IssuerO или SubjectCN. Далее представлен список таких подполей.
Значение Описание C Указывает название страны происхождения CN Указывает общее имя пользователя. Данное подполе может быть использовано только с ключем Subject GN Указывает полученное имя I Указывает на инициалы L Указывает место расположения (локализацию) O Указывает название компании или организации OU Указывает название подразделения компании S Указывает штат или регион T Указывает на описание (заголовок) данной персоны или же организации
Значения подполей, не приведенных в данном списке могут быть идентифицированны по их определению в ASN.1. Формат ASN.1 представляет из себя список чисел, разделенных точкой. К примеру 3.56.7886.34.
Замечание:
Вы можете использовать тспользовать цикл, для того, чтобы получить все названия и значения ключей коллекции:
<%
For each key in Request.ClientCertificate
response.write(key & ":" & Request.ClientCertificate(key) & "
")
Next
%>
Примеры:
Следующий пример показывает как можно узнать о том, есть ли у пользователя сертификат или нет.
<%
If len(Request.ClientCertificate("Subject")) = 0
Response.Write("Клиентский сертификат отсутствует!")
End if
%>Следующий пример показывает как можно получить общее название компании, которая выпустила сертификат.
<% = Request.ClientCertificate("IssuerCN") %>
Следующий пример показывает пример проверки на название организации - субъекте клиентского сертификата.
<%
If (Request.ClientCertificate("Subject") = "Msft" )
Response.Write("Хороший выбор компании :))!!!")
End if
%>Следующий пример выводит сообщение о дате прекращения действия настоящего сертификата.
Данный сертификат прекратит свое действие
<% = Request.ClientCertificate("ValidUntil") %>Следующий пример демонстрирует использование Флажков, для того, чтобы узнать известен ли издатель настоящего сертификата. Выражнение Include в первой строке скрипта позволяет последнему использовать обращение к названиям именованных флажнов (констант). В-принципе - вы можете использовать числовые значения, которые вы можете распечатать и использовать в дальнейшем.
<%
If Request.ClientCertificate("Flags") and ceUnrecognizedIssuer then
Response.Write "Неизвестный издатель сертификата!"
End if
%>
Коллекция Request.Cookies |
Коллекция Cookies (информация, позволяющая хранить информацию о сессии) позволяет получать значения cookies, переданных в запросе HTTP.
Синтакс:
Request.Cookies( cookie ) [ (ключ) | .атрибуты ]
Параметры:
cookie
Указанное имя cookie, значения которых вы хотите получить.
ключ
Необязательный параметр, используемый для получения значения подключа из коллекции данных cookie.
атрибуты
Специфическая информация о самих cookie. Данный параметр может иметь следующий вид:
Значение Описание HasKeys Только для чтения. Указывает, содержит ли cookies указанные ключи
Замечание:
Вы можете получать доступ к подключам коллекции информации (cookie) включая значение для ключа. Если cookies доступен с указанием ключа, то все ключи возвращаются в виде обычной строки запроса (как метод GET). К примеру, если MyCookie имеет два ключа First и Second и вы не указываете к какому из этих ключей вы обращаетесь вызывая Request.Cookies, то вам будет возвращена следующая строка:
First=значение_ключа_first&Second=значение_ключа_second
Если двое cookie под одинаковыми именами были переданы браузеру, то Request.Cookies возвратит одну из них, но ту, у которой более глубокая структура (наибольшая глубина вложенности). К примеру если передаются двое cookie под одинаковыми именами, но один имеет атрибут /www/ а другой /www/home/, то клиентский браузер передаст обе cookie в директорию /www/home/, но Request.Cookies возвратит только вторую.
Для определения определения того, еслть ли cookie с таким названием в их наборе, вы можете использовать следующий скрипт:
<% = Request.Cookies("MyCookie").HasKey %>
Если MyCookie имеются, то возвратится TRUE, иначе FALSE.
Вы можете использовать итератор в цикле с Cookie-коллекцией для перебора ключей. Смотрите пример ниже:
<%
'Печатаем всю коллекцию Cookie
For each cookie in Request.Cookies
if not cookie.HasKey then
'Печатаем строку cookie
%>
<% = cookie %> = <% = request.Cookies(cookie)%>
<%
Else
For each key in Request.Cookies(cookie)
%>
<% = cookie %> (<% = key %>) = <% = Request.Cookies(cookie) (key) %>
<%
Next
End if
Next
%>
Коллекция Request.Form |
Коллекция Form позволяет получать значения из формы элементов, посланных HTTP запросом при использовании метода POST.
Синтакс:
Request.Form( элемент ) [ ( индекс ) | .Count ]
Параметры:
элемент
Название элемента формы, значение которого предпологается получить
индекс
Не обязательный параметр, который позволяет вам получить доступ к одному из значений параметра (в том случае если передано не одно значение). Это может быть любое значение (целочисленное) в диапазоне от 1 до Request.Form(элемент).Count.
Замечание:
Коллекция Form индексируется по именам параметра в теле запроса. Значение Request.Form(элемент) является массивом все значений этого элемента, встретившихся в теле запроса. Вы можете определить количество значений переданных из формы путем вызова следующей конструкции: Request.Form(элемент).Count. Если параметр имеет единственное значение связанное с ним и счетчик возвращается равным 1. Если же параметр (элемент) не найден совсем, то счетчик вернет 0.
Для описания многозначного определения элемента формы вы должны указать значение индекса. Параметр индекс может присутствовать любое число от 1 до Request.Form(элемент).Count. Если вы описываете один из множества значений элементов без указания значения индекса, то возвращаемое значение примет вид строки, значения в которой разделены запятыми.
Когда вы используете параметры с Request.Form ваш сервер преобразует (разбирает) тело HTTP запроса и возвращает указанные данные. Если выше приложение требует использования не разобранных (не преобразованных) данных запроса, то вам необходимо вызвать Request.Form но без параметров.
Вы можете использовать итератор цикла для вывода все данных запроса (из формы). Пример, следующий ниже, показывает, что если пользователь заполнил форму указав два значения, Конфеты и Зефир в меню Любимые Кондитерские Изделия (параметр с именем Sweets), то , вы сможете получить следующие значения используя пример:
<% For each item In Request.Form("Sweets")
response.write(item & "
")
next
%>При выполнении данного примера вы увидите следующее:
Конфеты
ЗефирТакой же вывод может быть сделан с использованием цикла For...Next, что и демонстрирует следующий пример
<% For i=1 to Request.Form("Sweets").Count
response.write(Request.Form("Sweets") (i) & "
")
next
%>Вы можете использовать итератор цикла для вывода имени параметра, как показано ниже:
<% For Each x In Request.Form("Sweets")%>
Request.Form( <%= x %> ) = <% request.from (x) %>
<% next %>Данный скрипт возвратит браузеру следующий текст:
Sweets = Конфеты
Sweets = Зефир
Примеры:
Используем следующую форму:
Вот такой запрос будет посылать наша форма на сервер:
firstname=Марат&sweets=Конфеты
Далее идет наш скрипт:
Добро пожаловать, <%= Request.Form("firstname") %>.
Ваши любимые сладости - <%= Request.Form("sweets") %>!Наш скрипт породит следующий результат:
Добро пожаловать, Марат. Ваши любимые сладости - Конфеты!
Коллекция Request.QueryString |
Коллекция QueryString получает значения переменных их HTTP-строки запроса. Строка запроса определяется значениями, следующими за знаком вопроса (?). Некоторые различные процессы могут генерировать строку запроса. Для примера, таг анкор
вырабатывает значение с имененм String и значением "this is sample". Строка запроса также генерируется при передачи данных при обработке формы или прямым вводом строки пользователем прямо в браузер (строка адреса).
Синтакс:
Request.QueryString( переменная ) [ ( индекс ) | .Count ]
Параметры:
переменная
Имя переменной, через котурую будет передаваться значение.
индекс
Не обязательный параметр, который позволяет вам получить доступ к одному из значений параметра (в том случае если передано не одно значение). Это может быть любое значение (целочисленное) в диапазоне от 1 до Request.QueryString(элемент).Count.
Замечание:
Коллекция QueryString это разобранный вариант (преобразованный) из переменной QUERY_STRING в коллекции ServerVariables. Это позволяет вам получать переменные из QUERY_STRING по имени. Значение Request.QueryString(элемент) это массив всех значений элемента которые встречаются в пременной QUERY_STRING. Вы можете определить число значений данного элемента вызовом Request.QueryString(элемент).Count.
Если элемент имеет всего одно значение, то этот вызов вернет 1, если же такого элемента нет вовсе, то результат будет 0.
Примеры:
Клиентский запрос:
/scripts/directory-lookup.asp?name=fred&age=22
Результат мы видим в следующей строке (QUERY_STRING):
name=fred&age=22
Коллекция QueryString содержит в данном случае 2 члена - это name и age. Вы можете воспользоваться следующим скриптом:
Добро пожаловать, <%= Request.QueryString("name") %>.
Ваш возраст - <%= Request.Form("age") %>!И получим:
Добро пожаловать, Fred. Ваш возраст - 22.
Коллекция Request.ServerVariables |
Коллекция ServerVariables позволяет получать значения предопределенных переменных окружения.
Синтакс:
Request.ServerVariables( переменная )
Параметры:
переменная
Указывает имя переменной (а точнее константы) среды (окружения) сервера.
Она может быть одной из следующих значений:
Переменная Описание ALL_HTTP Все HTTP-заголовки, переданные клиенту. ALL_RAW Получает все заголовки в виде RAW. Различие между ALL_RAW и ALL_HTTP в том, что ALL_HTTP размещается как HTTP_ префикс перед именем заголовка, а имя заголовка всегда строчное. В ALL_RAW имя заголовка и значение присутствуют в том виде, в котром они получены клиентом. APPL_MD_PATH Получает мета-путь (WAM) к приложению для ISAPI Dll. APPL_PHYSICAL_PATH Получает физический путь указывающий на расположение мета-путя. IIS конвертирует APPL_MD_PATH к физическому (директории) пути и возвращает это значение. AUTH_PASSWORD Значение, введенное клиентом в диалоге авторизации. Эта переменная доступна только при основной (Basic) авторизации. AUTH_TYPE Метод авторизации, который сервер использует для проверки прав пользователей, когда применяется попытка получить скрипт, защищенный паролем. AUTH_USER Не обработанное имя пользователя (прошедшего авторизацию). CERT_COOKIE Уникальный ID (идентификатор) для клиентского сертификата, возвращается как строка. Может быть использован как подпись сертифицированного клиента. CERT_FLAGS бит0 - если установлен (1) - сертификат присутствует бит1 - если установлен - в случае, когда авторизация клиента прошла не успешно. Не удалось опознать пользователя.
CERT_ISSUER Издатель сертификата (O=MS,OU=IAS,CN=user name, C=USA). CERT_KEYSIZE Число бит, используемое в SSL, к примеру 128. CERT_SECRETKEYSIZE Размер (в битах) секретного ключа на сервере. (К примеру 1024). CERT_SERIALNUMBER Поле серийного номера клиентского сертификата. CERT_SERVER_ISSUER Издатель серверного сертификата. CERT_SERVER_SUBJECT Субъект серверного сертификата. CERT_SUBJECT Субъект клиентского сертификата. CONTENT_LENGHT Длина содержимого (в том виде, как взято клиентом). CONTENT_TYPE Тип данных в содержимом. Используется с запросами, которые прилагают информацию вместе с запросом, такие как GET, POST, PUT. GATEWAY_INTERFACE Версия спецификации CGI, используемая на сервере. В формате CGI/Версия. HTTP_ Значение, запоминаемое в заголовке HeaderName. Любой заголовок, приведенный в данной таблице должен начинаться с HTTP_. Замечание. Сервер интерпретирует любой символ подчеркивания в HeaderName как тире в в настоящем заголовке. К примеру если вы укажете HTTP_MY_HEADER, то сервер пошлет заголовок, как MY-HEADER.
HTTPS Возвращает ON если запрос прошел через SSL-протокол или же возвращает OFF если пакет не был защищен. HTTPS_KEYSIZE Число бит (размер) SSL-ключа, к примеру 128. HTTPS_SECRETKEYSIZE Число бит (размер) SSL секретного ключа на сервере, к примеру 1024. HTTPS_SERVER_ISSUER Издатель серверного сертификата. HTTP_SERVER_SUBJECT Владелец серверного сертификата. INSTANCE_ID Текущий идентификатор для IIS в текстовом формате. Если он равен 1, то это представляется в виде строки. INSTANCE_META_PATH Мета-путь к тому приложению, которое будет отвечать на запрос. LOCAL_ADDR Возвращает адрес сервера (IP), который связан с ним в IIS. Это важно на машинах, которые отзываются на многое количество IP адресов. LOGON_USER Windows NT учетная запись пользователя, который зарегистрирован на нем. PATH_INFO Иныормация о пути, в том виде, как ее получает клиент. Вы можете использовать скрипт, который использует виртуальный путь и PATH_INFO сервера. Если это информация, пришедшая из URL, то она декодируется сервером, прежде, чем ее получит CGI скрипт. PATH_TRANSLATED Преобразованный вариант PATH_INFO, который берет путь и, по необходимости, производится преобразование виртуальный -> физический. QUERY_STRING Строка с параметрами, передаваемая в запросе после знака вопроса (?). REMOTE_ADDR Адрес удаленного хоста, произведшего запрос. REMOTE_HOST Имя удаленног хоста, сделавшего запрос. Если сервер не имеет этой информации, то точно установит REMOTE_ADDR, а данную константу оставит пустой. REMOTE_USER Непреобразованное имя, переданное пользователем. REQUEST_METHOD Метод, который использовался, чтобы сделать запрос. Для протокола HTTP это GET, POST, HEAD. SCRIPT_NAME Виртуальный путь к скрипту, который запускается. Используется URL. SERVER_NAME Имя сервера, как хоста, DNS alias или IP адрес. SERVER_ROOT Номер порта, по которому был получен запрос. SERVER_PORT_SECURE Строка, содержащая 0 или 1. Если запрос обрабатывается защищенным портом, то значение 1, в противном случае 0. SERVER_PROTOCOL Имя и версия протокола запроса. Формат - протокол/версия SERVER_SOFTWARE Название и версия програмного обсеспечения, под которым стоит сервер. Формат следующий: название/версия URL Хранит основную порцию URL.
Замечание:
Если клиент передает заголовок подругому, нежели указано в таблице, то вы можете получить его значение, используя префикс HTTP_ в вызове Request.ServerVariables. Для примера рассмотрим вариант, если клиент отсылает такой заголовок:
SomeNewHeader: SomeNewValue
Вы сможете получить данный заголовок, используя следующий скрипт:
<% Request.ServerVariables("HTTP_SomeNewHeader") %>
а также вы можете воспользоватся изощренным скриптом, чтобы напечатать все серверные переменные в таблицу.
Переменная Значение>
<% For each name In Request.ServerVariables %>
<% = name %> <% = request.ServerVariables(name) %>
<% Next %>
Примеры:
Следующий пример демонстрирует использование объекта Request чтобы показать различные серверные переменные.
ALL_HTTP server variable =
<%= Request.ServerVariables("ALL_HTTP") %>
CONTENT_LENGTH server variable =
<%= Request.ServerVariables("CONTENT_LENGTH") %>
CONTENT_TYPE server variable =
<%= Request.ServerVariables("CONTENT_TYPE") %>
QUERY_STRING server variable =
<%= Request.ServerVariables("QUERY_STRING") %>
SERVER_SOFTWARE server variable =
<%= Request.ServerVariables("SERVER_SOFTWARE") %>
Следующий пример использует коллекцию ServerVariables чтобы вставить имя сервера в гиперссылку:
/scripts/MyPage.asp">Link to MyPage.asp
Метод Request.BinaryRead |
Синтакс:
численное_значение = Request.BinaryRead (счетчик)
Параметры:
численное_значение
массив беззнаковых байт, возвращенный данным мотодом. Этот параметр будет иметь тип VT_ARRAY | VT_UI1.
счетчик
перед запуском, указывается как много байт нужно прочитать от клиента. После этого метод будет выполнен, то счетчик будет содержать количество байт, удачно считанных от клиента. Общее число байт, которое будет в действительности прочитано меньше или равно Request.TotalBytes.
Замечание:
Метод Request.BinaryRead используется для чтения потока данных, переданных от клиента, как часть POST-запроса. Данный метод использует низкоуровненный доступ к этим данным. А, к примеру, Request.Form предоставляет вам теже данные, но предварительно преобразованные и рассортированные. Если вы вызвали в скрипте Request.BinaryRead вы никак не можете использовать в последующем метод Request.Form для получения данных из формы, в противном случае это приведет к ошибке.
Аналогично, используя в скрипте описание, присваивание и т.д. элементам формы через Request.Form вы уже не сможете воспользоваться методом Request.BinaryRead так как это приведет к ошибке.
Пример:
Следующий пример демонстрирует использования метода Request.BinaryRead для того, чтобы записать содержимое запроса в ваш массив.
<%
Dim binread
Dim bytecount
bytecount = Request.TotalBytes
binread = Request.BinaryRead(bytecount)
%>
Свойство Request.TotalBytes |
Данное свойство позволяет определить количество байт, которые клиент посылает серверу в теле запроса. Данное свойство является доступным только для чтения.
Синтакс:
счетчик = Request.TotalBytes
Параметры
счетчик
параметр которому будет присвоено значение, возвращенное данным свойством.
Пример:
Следующий пример показывает как можно получить размер клиентского запроса (в байтах), посланных серверу.
<%
Dim bytecount
bytecount = Request.TotalBytes
%>