На этом шаге мы рассмотрим свойства объекта TWebRequest.
При получении HTTP-запроса от клиента, Web-приложение разбирает запрос и
помещает данные из заголовка запроса и содержимое запроса в различные свойства объекта
TWebRequest. В случае приложений ISAPI и NSAPI это будет объект
TISAPIRequest, а для приложений CGI и WinCGI, объекты TCGIRequest
и TWinCGIRequest соответственно.
Свойства этих объектов условно можно разделить на группы:
- свойства, идентифицирующие запрашиваемый источник;
- свойства, описывающие Web-клиента;
- свойства, идентифицирующие метод запроса;
- свойства, описывающие ожидаемый ответ;
- свойства, представляющие содержимое запроса.
Свойства, идентифицирующие запрашиваемый источник
Свойства, идентифицирующие запрашиваемый источник, включают в себя свойства
- URL - полная строка запроса,
- Host - имя или IP-адрес сервера,
- ScriptName - имя серверного приложения,
- PathInfo - информация о пути, используемая Web-диспетчером для
вызова соответствующего объекта-действия и, наконец, - в свойство Query помещается информация для приложения о деталях запроса.
Например, если речь идет о выборке из базы данных,
то в свойство Query будут помещены соответствующие имена полей и их значения,
нужные для выборки. Для облегчения работы с запросом, строка запроса разбивается на
подстроки по знаку "амперсанда" и полученные строки, имеющие вид "Name=Value",
помещаются в свойство QueryFields типа TStrings.
Свойства, описывающие Web-клиента
Свойства, описывающие Web-клиента, это свойства From, Referer,
RemoteHost, DerivedFrom, RemoteAddr и UserAgent. В свойство From
записывается адрес электронной почты клиента. В свойстве Referer можно найти URI
ресурса, инициировавшего запрос. Если свойство Referer пустое, то можно использовать свойство
RemoteHost, в котором записан URI-клиента, но отсутствует информация о
пути. В свойстве DerivedFrom записывается URI источника, создавшего содержимое
запроса (свойство Content). Это свойство не пустое, если не пустое свойство Content
и если "контент" запроса был создан не Web-клиентом. В свойстве RemoteAddr записывается
IP-адрес клиента, а в свойстве UserAgent - имя приложения, приславшего запрос.
Свойства, идентифицирующие метод запроса
В свойства, идентифицирующие метод запроса, попадает свойство Method. Это свойство
может принимать следующие значения в стандарте HTTP 1.1:
- OPTIONS - метод Options позволяет получить справочную информацию о запрашиваемом
ресурсе и командах (методах) разрешенных на данном сервере; - GET - в ответ на такой запрос, клиент должен получить содержимое URI,
указанного в запросе; - HEAD - по этому методу клиент получит только заголовочную информацию ресурса,
указанного в запросе; - POST - в запросе Web-приложению передается информация, которая
должна быть им опубликована; - PUT - запрос на замену указанного ресурса содержимым запроса;
- DELETE - этот метод позволяет удалить или скрыть запрашиваемый URL;
- TRACE - этот метод используется для отладки: сервер отсылает обратно
клиенту присланный им "контент";
В эту группу можно включить еще и свойство MethodType.
Свойства, описывающие ожидаемый ответ
Свойства, описывающие ожидаемый ответ, это свойства Accept, IfModifiedSince и
Cookie. Первое свойство перечисляет типы мультимедийных файлов, с которыми может работать клиентское
приложение. Во втором свойстве можно указать время и использовать это значение с так
называемым условным GET, когда клиент запрашивает получение ресурса только в
том случае, если он изменился после указанного момента времени. Последнее свойство содержит
различные свойства Cookie, которые могут повлиять на содержание Web-ответа.
Свойства, представляющие содержимое запроса
Свойства, представляющие содержимое запроса, используются не всеми методами запроса,
но методу POST они требуются. Это свойства Content, ContentFields, ContentType,
ContentLength, ContentEncoding, ContentVersion и Title. Содержимое
запроса помещается в поле Content. Если запрос можно разбить на подстроки, разделенные
знаком амперсант, то полученные значения помещаются в свойство ContentFields типа TSrings.
Тип содержимого отмечается в свойстве ContentType. Обычно это свойство принимает значение text/html,
хотя в специфических случаях значения могут быть другими. Размер свойства Content в
байтах помещается в свойство ContentLength. Если содержимое запроса кодировалось, то
использованные для этого методы перечисляются в свойстве ContentEncoding через запятую.
В свойстве ContentVersion помещается информация об имени приложения и версии. В
свойстве Title может содержаться некоторая заголовочная информация.
Со следующего шага мы начнем рассматривать ответ приложения Web-сервера клиенту.