На этом шаге мы рассмотрим свойства объекта TWebRequest.
При получении HTTP-запроса от клиента, Web-приложение разбирает запрос и помещает данные из заголовка запроса и содержимое запроса в различные свойства объекта TWebRequest. В случае приложений ISAPI и NSAPI это будет объект TISAPIRequest, а для приложений CGI и WinCGI, объекты TCGIRequest и TWinCGIRequest соответственно.
Свойства этих объектов условно можно разделить на группы:
Свойства, идентифицирующие запрашиваемый источник, включают в себя свойства
Например, если речь идет о выборке из базы данных, то в свойство Query будут помещены соответствующие имена полей и их значения, нужные для выборки. Для облегчения работы с запросом, строка запроса разбивается на подстроки по знаку "амперсанда" и полученные строки, имеющие вид "Name=Value", помещаются в свойство QueryFields типа TStrings.
Свойства, описывающие 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:
В эту группу можно включить еще и свойство 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-сервера клиенту.