Протокол НТТР базируется на основе парадигмы запрос/ответ. Клиент посылает запросы серверу с указанием метода запроса, URI, версии протокола; сообщения передаются в соответствии со спецификацией MIME, содержащей информацию пользователя и поля, необходимые для установления соединения с сервером. Сервер, получив запрос, передает номер порта соединения, версию протокола соединения, сообщение об успешном соединении или ошибке при установлении сеанса, данные в соответствии со спецификацией MIME и служебные поля.
Большинство соединений НТТР инициализируется агентом пользователя и состоит из запроса на доступ к ресурсам необходимого сервера. Более сложные ситуации возникают, когда в цепочке запрос/ответ присутствует процесс-посредник. Выделяют три формы процессов-посредников: заместитель, шлюз и туннель. Процесс-заместитель - это передающий агент, который принимает запрос для URI, перезаписывает все части сообщения и передает преобразованный запрос серверу, определяемому по параметрам URI. Шлюз (межсетевой) - это принимающий агент, выступающий в роли отдельного сетевого уровня, который, если необходимо, может передать запрос вышестоящим службам протоколов. Туннель - это коммутатор между двумя точками соединения, который не изменяет семантику сеанса; туннель используется, когда необходимо передать информацию через посредника в том случае, когда посредник не может определить тип передаваемой информации. Сообщения, направляемые в соответствии с цепочками запрос/ответ, должны пройти через четыре различных соединения.
В Internet сеансы НТТР базируются на соединениях TCP/IP. По умолчанию используется порт 80, но возможно использование и других портов. Это не исключает возможности использовать НТТР как протокол прикладного уровня для других протоколов Internet или протоколов других сетей. НТТР предполагает наличие транспортного протокола; любой протокол, который удовлетворяет требованиям транспортного уровня, может использоваться для организации сеансов НТТР. Однако, функционирование НТТР/1.1 предполагает обеспечение устойчивого соединения.
Поле запроса | Основной Заголовок |
Заголовок запроса |
Заголовок объекта | Тело объекта |
(Reqest-Line) | (General-Header) | (Reqest-Header) | (Entity-Header) | (Entity-Body) |
Conditional Get (условный) - когда в запросе используется поле If-Modified-Since. Метод Conditional Get означает, что определенный запросом объект будет передаваться в случае, если дата его модификации старше даты, указанной в поле If-Modified-Since; | |
Partial Get (частный) - когда в запросе используется поле Range. Это позволяет определить, какую часть от определенного объекта требуется передать; |
Cashe-Control - поле директив, используемое процессами буферизации при инициализации цепочек запрос/ответ; | |
Connection - поле, позволяющее клиенту и серверу определить опции, которые используются только в процессе соединения; | |
Date - поле, содержащее время и дату; | |
Via - поле, включающее информацию о протоколе передачи и трафике сообщения от клиента к серверу при запросе и от сервера к клиенту при ответе; | |
Upgrade - поле, позволяющее программе пользователя определять, какие дополнительно протоколы она поддерживает и готова использовать, если сервер имеет возможность на переключение протоколов. Сервер должен использовать поле Upgade, содержащее сообщение 101 (“переключение протоколов”), для индикации включенных протоколов. |
Accept - поле, которое может использоваться для определения множества медиатипов (media types), которые являются приемлемыми для ответа. Символ * используется для групп медиатипов, с символами */* используются все медиатипы, а “type/*” определяет все подтипы данного типа. Параметр диапазона q определяет значимость медиатипов в определенном диапазоне и определяет заинтересованность пользователя в конкретном медиатипе. По умолчанию q=1. В поле Accept, созданном клиентом НТТР/1.1, разделителем диапазона медиатипов от диапазона параметров является символ “:“. Сервер НТТР/1.1 должен корректно обрабатывать разделитель “;” , используемый в версии НТТР/1.0. |
Поле Accept-Charset применяется для отображения символьной установки, используемой для запроса. Это поле позволяет программам клиента и сервера определить подмножество символьных кодов для устойчивой передачи данных. |
Поле Accept-Encoding содержит информацию об используемом методе уплотнения. | |
Поле Accept-Language содержит информацию об используемом языке (En - английский; Da - датский и т.д.). |
Поле Authorization может использоваться для передачи информации программой пользователя о самой себе. | |
Поле From может содержать e-mail адрес Internet для пользователя, который контролирует запросы программы-пользователя. |
Поле Host определяет номера портов и хостов - источников в Internet. Оно должно содержать сетевой адрес сервера или межсетевого шлюза в формате URI. Если не указывается номер порта, то по умолчанию принимается номер 80. |
Поле If-Modifided-Since используется совместно с методом Get для следующих целей: если запрашиваемый объект не был изменен со времени, указанного в поле, то копия объекта сервером передаваться не будет. | |
Поле Referer позволяет программе клиента точно определить адрес (URI) источника. Это позволяет создать серверу внутренний список к ресурсам по интересам, регистрациям и т.д. | |
Поле User-Agent содержит информацию об агенте пользователя. Это необходимо для определения статистики работы агента пользователя, для определения некорректной работы протоколов и автоматического распознавания агентов пользователей. | |
Поле Max-Forward может использоваться с методом Trace для определения времени тайм-аута. |
Allow - поле содержит список установленных методов, поддерживаемых источником, определенном в URI. |
Content-Base - может быть использовано для спецификации базового URI с целью определения относительного URL в объекте. | |
Content-Encoding - содержит информацию о типе кодирования, который был применен к источнику. | |
Content-Language - поле содержит идентификатор языка, в формате которого передается информация. | |
Content-Length - содержит размер объекта в десятичном виде. | |
Content-Location - используется для определения адреса дополнительного источника, связанного с ссылкой в теле объекта. | |
Content-Range - передается для определения размера блока сообщения, а также всей длины запрошенного/переданного объекта. |
Content-Type - содержит тип передаваемого объекта (тип метаинформации). | |
Last-Modified - дата и время последней модификации объекта. | |
Title - содержит название объекта. |
Transfer-Encoding - содержит информацию о типе преобразования, который был применен к телу объекту для надежной передачи от источника к получателю. |
1xx: информационный - запрос принят, процесс продолжается; | |
2xx: успешное завершение - запрос был успешно принят, идентифицирован и обработан; | |
3хх: переназначение - следующее действие должно быть обработано, чтобы завершить запрос; | |
4хх: ошибка пользователя - запрос содержит неверный синтаксис или не может быть выполнен; | |
5хх: ошибка сервера - сервер не может выполнить требуемый запрос. |
Код состояния (Status-Code) |
Пояснение (Reasone-Phrase) |
100 101 200 201 202 203 204 205 206 300 301 302 303 304 305 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 500 501 502 503 504 505 |
Продолжение Переключение протоколов Норма Принят Создан Не авторитетная информация Не содержит Сбросить содержание Частично содержит Множественный выбор Перемещен постоянно Перемещен временно Смотри другой Не изменен Используй посредника Неверный запрос Неизвестен Необходима оплата Запретный Не найден Метод не может быть разрешен Не доступен Требуется идентификация посредника Тайм-аут запроса Конфликт Послан Необходима длина Предварительная ошибка Тело запроса слишком велико URI запроса слишком велико Неподдерживаемый тип медиатипов Не применим Внутренняя ошибка сервера Не выполнено Ошибка межсетевого шлюза Служба не доступна Тайм-аут межсетевого шлюза Версия НТТР не поддерживается |
Location (местоположение) - используется для перенаправления приема информации к источнику, отличному от указанного в URI для завершения запроса или определения нового источника. Если поле состояния имеет значение 201, то поле Location будет содержать тот новый ресурс, который был создан запросом. Если поле состояния имеет значение 3хх, то Location должно содержать URL приоритетного сервера для автоматического переадресования ресурса. | |
Proxy-Authenticate - поле используется совместно с полем состояния, значение которого равно 407. Параметры поля состояния из вызовов показывают параметры и схему идентификации посредника по запросу URI. | |
Public (для общего использования) - содержит список нестандартных методов, поддерживаемых сервером. Пример: Public: OPTIONS, MGET, MHEAD. | |
Retry-After (обратись после) - поле используется совместно с полем состояния, имеющим код 503, для индикации того, как долго служба не будет доступна по запросу клиенту. Значение поля может быть представлено как дата в формате НТТР или время в секундах после окончания запроса. |
Server - поле содержит информацию о программном обеспечении, используемом сервером при обращении запроса. Пример : Server : Cern / 3.0 libwww / 2.17. | |
WWW-Authenticate - поле использует код поля состояния, значение которого равно 407. Параметры поля состоят по крайней мере из одного вызова, который показывает параметры и схему(ы) идентификации посредника по запросу URI. |
Sun , 22 Feb 1997 13:15:45 GMT (здесь GMT - время по Гринвичу); | |
Sunday , 22 - Feb - 97 13:15:45 GMT; | |
Sun Feb 22 13:15:45 1997. |
|