Сайт Информационных Технологий

3.2. Протокол передачи гипертекста (HTTP)

3.2.1. Сообщения полного запроса HTTP
3.2.2. Сообщения полного ответа HTTP


3.2. Протокол передачи гипертекста (HTTP)

Так как мне предстоит спроектировать и реализовать proxy сервер, поддерживающий протокол HTTP, то необходимо предварительно рассмотреть работу этого протокола.

Базовая структура World Wide Web основана на том, что протокол HTTP работает как обобщенное средство передачи различных типов информации от сервера к клиенту. Каждая сущность, которая может быть предоставлена, идентифицируется уникальным образом с помощью URL (Universal Resource Locator — универсальный локатор ресурсов).

Наиболее общим типом данных, который передается с помощью HTTP, является язык HTML. Кроме того, что в HTML включены основные команды для форматирования текста, он также имеет команды, которые обеспечивают такие возможности, как связи гипертекста и загрузка встроенных изображений. Ресурсы с гиперсвязями и файлы встроенных изображений идентифицируются с помощью URL, которые вводятся в документ HTML.

Протокол HTTP является основным протоколом, который осуществляет трафик Web. Спецификация HTTP описывает HTTP 1.1 следующим образом[15]:

Протокол передачи гипертекста HTTP является протоколом уровня приложений для распределенных, совместных, гипермедиа информационных систем. Он является обобщенным, не имеющим состояния, объектно-ориентированным протоколом, который может использоваться для разнообразных систем, таких как серверы имен и распределенные системы управления объектами, благодаря расширению его методов запросов (команд). Отличительным свойством HTTP является возможность ввода с клавиатуры и согласования представления данных, что позволяет строить системы независимо от передаваемых данных.

В приведенном ниже фрагменте определения, включающем свыше десятка ключевых слов, дается лишь краткое описание того, чем является HTTP и как он работает в качестве основы для Web. Однако анализ этого фрагмента позволяет более глубоко понять этот простой, но мощный протокол:

Сообщения HTTP делятся на четыре категории:

Простой запрос состоит из строки GET, после которой следует пробел, URL запроса, символ возврата каретки, и символ новой строки. Простой ответ возвращает только тело сущности.

Сущность — это объект, на который ссылается URL[15]. Например, страница, форматированная в HTML, является одним типом сущности, изображение .GIF является другим типом. Тело сущности представляет собой фактическое содержимое сущности, в отличие от заголовка сущности, в котором содержится информация о сущности, например ее размер и тип.

Хотя спецификации HTTP все еще поддерживают форматы простых сообщений, они исключают многие из наиболее важных характеристик HTTP. Например, простые сообщения ограничиваются методом GET и, таким образом, не могут поддерживать формы. Формат сообщения простого запроса также не позволяет клиенту использовать согласование содержимого и идентифицировать тип среды возвращаемой сущности, поэтому лучше избегать применения этого формата. В последующих разделах описаны сообщения полного запроса и полного ответа.

3.2.1. Сообщения полного запроса HTTP

Сообщение полного запроса HTTP состоит из строки запроса с последующим нулем или более общими заголовками, заголовками запросов или заголовками сущностей.

Заголовки HTTP представляют собой строки в формате name: value, которые разделены символами возврата каретки. Например, заголовок Content-length 10 240 указывает, что тело сущности состоит из 10 240 байтов. После заголовков следуют символы возврата каретки и новой строки, а для некоторых методов — тело сущности.

Приведенное далее описание иллюстрирует, как отправляются и возвращаются заголовки, если дается ответ на сообщение полного запроса[15]:

Клиент подсоединяется к серверу www.netscape.com и запрашивает заголовок начальной-страницы Netscape. Метод HEAD запрашивает только заголовок. Наклонная черта (/) относится к сущности, по умолчанию - к начальной странице. HTTP/1.0 указывает версию для сообщения полного запроса.

Клиент: HEAD/HTTP/1.0

Затем клиент отсылает общий заголовок с адресом e-mail, который относится к броузеру.

Клиент: From: mailto:glyuk@org.com

Клиент также указывает страницу, которая отослала его по адресу:

www.netscape.com.

Клиент: Referer: http://search.yahoo.com/bin/search?p=netscape

После этого клиент выдаёт пустую строку, как предусмотрено протоколом HTTP.

Клиент:

Сервер отвечает кодом 200, показывающим, что сообщение было успешно интерпретировано и что требуемая сущность имеется.

Сервер: НТТР/1.0 200 OК

Затем сервер отвечает общими заголовками. Сюда входят тип сервера...

Сервер: Server: Netscape-Communications/1.1

... текущая дата и время суток

Сервер: Date: Thursday. 28-Nov-99 05:30:32 GMT

... а также дата и время суток, когда последний раз была изменена запрашиваемая сущность

Сервер: Last-modified: Wednesday, 27-Nov-99 15:23:10 GMT

Сервер отправляет заголовки сущности, которые, в частности, относятся к запрашиваемой сущности. Туда входят ее размер...

Сервер: Content-length: 11044

и тип. Тип содержимого указан в формате MIME.

Сервер: Content-type: text/html

Затем www.netscape.com закрывает соединение.

Как сообщения полного запроса, так и сообщения полного ответа зависят от методов, которые представляют собой читабельные для людей команды, состоящие из одного слова и управляющие протоколом HTTP, такие как GET и POST.

Самое простое сообщение полного запроса HTTP состоит только из одной строки запроса. Строка запроса состоит из метода, пробела, запрашиваемого URL, пробела, версии HTTP, символов возврата каретки и новой строки. Например, следующее сообщение является достоверным сообщением полного запроса НТTР:

GET index.html HTTP/I.I

В этом сообщении GET — метод, index.html — запрашиваемый URL и HTTP/1.0 — версия HTTP.

В отличие от простого запроса, полный запрос может использовать любой из множества методов. Предыдущий пример демонстрирует наиболее распространенный метод GET. Протокол HTTP 1.0 поддерживает только три метода: GET, HEAD и POST:

В спецификацию метода HTTP 1.1, добавлено еще десять методов:

HTTP использует для передачи информации данных и управляющей информации один общий канал связи, а не два раздельных канала, как это делается в FTP. Для того чтобы передать и тело сущности, и управляющую информацию, необходимую для правильного интерпретирования этого тела сущности, поля заголовков HTTP выполняют функцию модификаторов методов.

Имеется три типа полей заголовков[13]:

Тело сущности, будь то запрос или ответ, представляет собой простой поток октетов. HTTP не ограничивает информацию, которая протекает по этому телу, а просто обеспечивает механизм для маркировки и передачи этой информации. Наиболее часто используемые методы запроса, GET и HEAD, не отсылают сущность от клиента к серверу, поэтому тело сущности обычно не относится к сообщению запроса.

3.2.2. Сообщения полного ответа HTTP

Сообщение полного ответа HTTP состоит из строки статуса с последующим нулём или более общими заголовками, заголовками ответа или заголовками сущности. Затем после заголовков следуют символы возврата каретки и новой строки и, возможно, тело сущности.

Строка статуса состоит из версии HTTP, пробела, кода статуса, пробела, сообщения, символов возврата каретки и новой строки. Следующее весьма распространённое сообщение указывает на разрыв связи - указатель на страницу, которой не существует:

HTTP/1.1 404 Not found

Как явствует из ранее приведенных примеров, каждый код статуса состоит из трёх цифр. Код 200, указывающий на успешный ответ, является наиболее распространенным кодом статуса. В таблице 3.1 приводится подробное описание кодов ответа в приложениях HTTP[15]. О самом последнем списке кодов можно узнать по адресу: http://www.ics.uci.edu/pub/ietf/http/.

Таблица 3.1. Коды ответов команды HTTP

Код Описание

200

ОК. Команда выполнена успешно

201

Создан. HTTP выдает этот код после того, как команда POST создаёт новый ресурс. Текстовый фрагмент этого ответа дает URL нового ресурса.

202

Принят. Запрос был принят для обработки, однако обработка не завершена.

203

Частичная информация. Этот код является ответом на команду GET, которая не извлекает весь объект.

204

Нет ответа. Нет информации для обратного отправления.

301

Перемещен. Запрашиваемый ресурс был перемещен на новый URI

302

Обнаружен. Этот ресурс фактически существует под другим URI

303

Метод. Этот ответ рассматривается впервые. Пока этот код ответа не станет частью стандарта, вероятность того, что вы получите этот код из любого сервера HTTP, мала.

304

Не модифицирован. Если клиент выполняет условную GET, указывая условие if modyfied -Since, возвращается указанный код.

400

Неправильный запрос. Запрос неправильно форматирован или непонятен по какой-либо причине.

Продолжение таблицы 3.1. Коды ответов команды HTTP

401

Не санкционирован. Клиент не располагает соответствующими .правами для извлечения запрашиваемого файла

402

Требуется плата. Запрашиваемый файл предусматривает утверждение платежа за извлечение.

403

Запрещен. Запрашиваемый файл запрещен для использования его в приложении клиента.

404

Не обнаружен. Запрашиваемый файл не обнаружен.

500

Внутренняя ошибка. В сервере HTTP имела место внутренняя ошибка, которая помешала ему выполнить внутренний запрос.

501

Не реализован. Этот сервер не реализовал команду, которую выдал клиент.

502

Служба временно перегружена. В данный момент слишком много клиентов подсоединены к серверу, поэтому новые подсоединения не допускаются.

503

Останов шлюза. Присоединение сервера не было создано до останова шлюза

 

После кода статуса сразу же идет набор заголовков и затем тело сущности. Заголовки ответа обеспечивают точное месторасположение запрашиваемого ресуpca, версию программного обеспечения сервера, ответы аутентификации и необязательные методы, которые поддерживает сервер. Примером полезности заголовка ответа может быть случай, когда броузер использует значение, возвращаемое в поле сервера (например, Server: Netscape-Communications/1.1) для определения типа сервера, используемого некоторым Web-узлом.

Сообщение ответа обычно имеет один или несколько заголовков сущности описывающих фактическую сущность, которую необходимо передать. Ниже приводятся некоторые из наиболее важных заголовков сущностей:


Site of Information Technologies
Designed by  inftech@webservis.ru.