Как видно на рисунке все транзакции между клиентом и сервером происходят на
верхнем уровне сетевой иерархии. Все HTTP-транзакции имеют один общий формат.
Каждый запрос клиента и ответ сервера состоит из трех частей: строки запроса
(ответа), раздела заголовка и тела.
Клиент инициирует транзакцию следующим образом:
- Клиент устанавливает связь с сервером по назначенному номеру порта (по
умолчанию - 80). Затем посылается запрос документа с указанием HTTP комманды
(называемой методом), адреса документа и номера версии HTTP. Например:
GET /index.html HTTP/1.0
- Клиент посылает необязательную информацию заголовка, чтобы сообщить серверу
информацию о своей конфигурации и данные о форматах документов, которые он может
принимать. Вся информация заголовка указывается построчно и каждая строка
содержит пару имя-значение. Заголовок завершается пустой строкой.
Например:
User-Agent: Mozilla/2.02Gold (WinNT; I) Accept: image/gif,
image/jpeg, */*
- Послав запрос и заголовки, клиент может отправить дополнительные данные
(тело запроса). Эти данные используются, например, CGI-программами, применяющими
метод POST.
Сервер отвечает на запрос клиента следующим образом:
- Первая часть ответа - строка состояния, содержащая версию протокола HTTP,
код состояния и описание, которое представляет собой просто понятный для
человека текст, поясняющий код состояния. Например:
HTTP/1.0 200 OK
- После строки состояния сервер передает клиенту информацию заголовка ответа,
содержащую данные о самом сервере и затребованном документе. Завершает
заголовок пустая строка. Например:
Date: Fri, 20 Sep 1996 08:17:58 GMT Server:
NCSA/1.5.2 Last-modified: Mon, 17 Jun 1996 21:53:08 GMT Content-type:
text/html Content-length: 2482
- Если запрос клиента успешен, то сервер посылает затребованные данные. Это
может быть копия файла или документ сформированный "на лету". Если
запрос клиента удовлетворить нельзя, то сервер передает дополнительные данные в
виде удобного для человека разъяснения причин, по которым сервер не смог
выполнить запрос.
В HTTP 1.0 после передачи сервером затребованных данных следует
разъединение с клиентом и транзакция завершается, если не был передан заголовок
Connection: Keep Alive. В HTTP 1.1 сервер по умолчанию не разрывает
соединение и клиент может посылать другие запросы. Это позволяет сэкономить
время и затраты клиента, которому не приходится заново соединяться с тем же
сервером. Таким образом, в HTTP 1.1 транзакция может циклически повторяться,
пока клиент или сервер не закроет соединение явно.
МетодыМетод - это HTTP-комманда, с которой начинается первая строка
запроса клиента. Метод сообщает серверу о цели запроса. Чаще всего используются
методы GET, HEAD и POST (регистр имеет значение).
- GET
- Этим методом запрашивается информация, расположенная на сервере в указанном
в запросе месте. Методом GET web браузеры обычно получают документы для
визуализации. Результатом такого запроса может быть, например, файл, лежащий на
сервере или же сформированный специально для этого запроса. Например:
GET / HTTP/1.0 User-Agent: Simple Web client by Eugen
Kuleshov Accept: */*
- HEAD
- Метод HEAD аналогичен методу GET, за исключением того, что
сервер не посылает тело ответа, а только информацию заголовка о запрошенном
файле или ресурсе. Обычно этот метод используется для получения информации о
документе не получая документ. Можно, например, затребовать следующую
информацию:
- время изменения документа;
- размер документа;
- тип документа;
- тип сервера.
Следует отметить, что большая часть посылаемой сервером
информации заголовка, не является обязательной и может представляться не всеми
web серверами. Например:
HEAD / HTTP/1.0 User-Agent: Simple Web client by Eugen
Kuleshov Accept: */*
- POST
- Этот метод позволяет посылать на сервер данные в запросе клиента. Эти данные
могут быть использованы сервером для динамической генерации запрашиваемого
документа, например для передачи входных данных для:
- сетевых служб (например телеконференций)
- программ с интерфейсом типа "коммандная строка"
- выполнения операций в базах данных
Например:
POST / HTTP/1.0 User-Agent: Simple Web client by Eugen
Kuleshov Accept: */* Content-type:
application/x-www-form-urlencoded Content-length:
16
test=20&test2=22 Обратите внимание на атрибуты
Content-type и Content-length они используются для того, чтобы
указать серверу на тип кодирования тела запроса и дать информацию о длине тела.
Подробнее вы можете почитать в соответствующем RFC (HTTP 1.0 - rfc1945 или HTTP 1.1 - rfc2068).
|