UP
Содержание запроса и ответа
Как видно на рисунке все транзакции между клиентом и сервером происходят
на верхнем уровне сетевой иерархии. Все 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).
UP
|