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