Главная > Программирование > Программирования сетевых взаимодействий в Java
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

2.2.3. Описание протокола HTTP

Параметры и методы запроса

После установления TCP-канала между клиентом и сервером HTTP, клиент отправляет на сервер запрос. Общая структура запроса выглядит следующим образом:

METHOD Request-URI HTTP-Version

[General-Header]

Date

Pragma

[Request-Header]

Authorization

From

If-Modified-Since

Referer

User-Agent

[Entity-Header]

Allow

Content-Encoding

Content-Length

Content-Type

Expire

Last-Modified

extension-header

/* пустая строка */

[Entity-Body]

Поле «METHOD» содержит идентификатор метода обращения к HTTP-серверу. Метод определяет состав и структуру заголовков запроса, вид передачи и структуру параметров запроса. Наиболее распространенными методами являются «GET» и «POST». Иногда также используются методы «HEAD», «DELETE», «PUT».

Метод «GET» запрашивает информацию о ресурсе, расположенном по заданному URI. Как правило, запрашиваемая информация представляет собой HTML, TXT или другой текстовый файл. Если URI ассоциирован с исполняемым файлом - сервисом CGI, процесс CGI будет запущен, и клиенту будут переданы результаты стандартного потока вывода этого процесса. Если ресурсу URI для работы необходимы параметры, они должны быть указаны в URI ресурса.

Метод «POST», как правило, используется для передачи клиентом на сервер данных, которые должны быть обработаны ресурсом, указанным в URI. Данный метод чаще всего используется для работы с CGI-сервисом. Метод

«POST» передает параметры ресурсу URI в теле сообщения, поэтому при его использовании не требуется соблюдать никаких ограничений на длину передаваемой строки параметров. Ответы на запросы методом POST, как правило, не кэшируются.

Метод «HEAD» аналогичен методу «GET», за исключением того, что клиенту возвращается только заголовок сообщения ответа (усеченный «GET»). Этот метод, в основном, используется для тестирования гиперссылок и проверки доступа к ресурсам.

Метод «DELETE» используется для удаления ресурса определенного URI.

Метод «PUT» используется, когда клиент желает сохранить передаваемый на сервер ресурс с идентификатором URI.

Поле «Request-URI» - URI ресурса сервера. Он может быть представлен в абсолютном или в относительном форматах. Абсолютный формат содержит все части URI: схему, адрес и путь, а относительный формат - только путь к ресурсу на текущем сервере HTTP.

Поле «HTTP-Version» - версия HTTP-протокола, который клиент предполагает использовать. Идентификатор версии передается для согласования параметров работы клиента и сервера. Если версия запроса не указана, по умолчанию используется старая версия «НТТР/0.9», которая обязана поддерживаться всеми участниками HTTP-соединения.

Первая строчка запроса может выглядеть, например так:

GET /maindoc.html НТТР/1.0

Общий заголовок «General Header». Этот заголовок может использоваться как в запросе, так и ответе сервера. Он появляется только тогда, когда передается тело сообщения (не пуст параметр «Entity-Body»), т. е. либо когда клиент передает запрос методом «POST» с параметрами, либо когда сервер отвечает передачей сообщения.

Поле «Date:» содержит время построения сообщения (запроса или ответа).

Поле «Pragma:» используется для установки специальных директив участникам соединения. Например, опция «no-cache» не позволяет промежуточным объектам соединения использовать кэш при ответе на запрос.

Заголовок «General Header» может выглядеть, например, так:

Date: Tue, 15 Nov 2010 08:12:31 GMT Pragma: no-cache

Заголовок запроса «Request-Header» появляется только в запросах клиентов. Он позволяет клиентам отправлять на сервер дополнительную информацию о себе.

Поле «Authorization:» содержит информацию аутентификации пользователя. Ответ на запрос, содержащий поле «Authorization:» не кэшируется промежуточными объектами соединения.

Поле «From:» может содержать Internet-адрес пользователя. Поле может использоваться со стороны сервера для формирования журнала заходов или, например, рассылки праздничных поздравлений наиболее активным посетителям сервера.

Поле «If-Modified-Since:» используется при работе методом «GET». Если запрашиваемый ресурс не изменялся с момента, указанного в этом параметре, данный ресурс не возвращается, по запросу возвращается только заголовок сообщения ответа и соответствующий код возврата. Это поле может использоваться для контроля за содержанием кэша.

Поле «Referer:» содержит URI предшествующего ресурса. Этот параметр может использоваться сервером, например, для оптимизации кэширования, построения путей поиска и т. д.

Поле «User-Agent:» содержит информацию о программном обеспечении клиента.

Заголовок передаваемого сообщения «Entity-Header». Содержит информацию о структуре и формате тела запроса, или, если тело сообщения отсутствует, информацию о запрашиваемом ресурсе. Может появляться как в запросе клиента, так и ответе сервера.

Поле «Allow:» содержит список методов, поддерживаемых ресурсом. Это поле носит исключительно информационный характер.

Поле «Content-Encoding:» содержит идентификатор типа дополнительной кодировки ресурса (т. е. для использования этого ресурса он должен быть раскодирован указанным алгоритмом).

Поле «Content-Length:» определяет длину тела сообщения.

Поле «Content-Type:» содержит тип ресурса и таблицу кодировки представляемых данных (us-ascii, iso8580-l, windows-1251, koi8-r и др., в соответствии со спецификацией MIME).

Поле «Expires:» содержит дату окончания срока действия ресурса. Это поле, например, может использоваться в механизмах кэширования, как параметр запрета кэширования устаревших ресурсов. Это поле может также информировать пользователя о том, что, например, информация, предоставляемая данным ресурсом, устарела.

Поле «Last-Modified:» содержит дату и время последнего изменения ресурса.

Каждая строка заголовка заканчивается символами <CRLF>. Если запрос содержит сообщение, оно располагается после пустой строки - (/* line */), которая отделяет заголовки от тела запроса. Формат и длина тела сообщения определяются заголовком «Entity-Header» и должны удовлетворять стандартам MIME.

Структура ответа

После получения запроса сервер обрабатывает его и отправляет результат обработки клиенту. Ответ состоит из следующих частей:

HTTP-Version <SP> Status-Code <SP> Reason-Phrase

[General-Header]

[Responce-Header]

Location

Server

WWW-Authenticate [Entity-Header]

/* line */

[Entity-Body]

Поле «HTTP-Version» - идентификатор версии HTTP-протокола, которую поддерживает сервер.

Поле «Status-Code» - трехзначный числовой код статуса обработки запроса, который обрабатывается программным обеспечением клиента. Числовые коды обработки запроса составляют иерархическую структуру. Например, «200» - код успешной обработки запроса.

Поле «Reason-Phrase» - короткая строка описания статуса, которая, в основном, предназначена для текстового анализа результата обработки запроса. Первая строка ответа сервера может выглядеть, например, так:

НТТР/1.0 200 ОК

Далее следуют заголовки. Состав, структура и предназначение заголовков «General-Header» и «Entity-Header» такие же, что и в пакете запроса. Ответ содержит специальный заголовок - заголовок ответа «Response-Header».

Заголовок «Response-Header» позволяет передавать дополнительную информацию обработки запроса, которую нельзя поместить в строку статуса.

Поле «Location:» содержит полный URI ресурса, который отвечает на отправленный запрос. Это поле - своеобразный переключатель, который перенаправляет запрос на другой сервер. Иными словами, если клиент отправил запрос на WWW-сервер с целью получения какого-либо документа, который был перемещен в другой каталог или на другой сервер, и запрашиваемый сервер отвечает «Location:...», то запрос клиента автоматически перенаправляется по URI, указанному сервером.

Поле «Server:» содержит спецификацию программного обеспечения WWW-сервера, отвечающего на запрос.

Поле «WWW-Authenticate:» содержит параметры схемы и пространства аутентификации.

<< Предыдущий параграф Следующий параграф >>