HTTP (HyperText Transfer Protocol) — протокол передачи информации между клиентом и сервером в Web-технологиях. Обмен информацией состоит из запроса клиента и ответа сервера.
Запрос - это сообщение, посылаемое клиентом серверу.
Структура запроса.
Запрос включает в себя следующие указатели:
В нижеследующем примере запрашивается выполнение метода POST по отношению к ресурсу, находящемуся по адресу http://www.serv.ru/index.html, в дополнительных данных указаны форматы и кодировка сообщений, которые клиент может принимать. Заголовок завершается пустой строкой. Например:
    POST /index.html HTTP/1.0
    Host: www.serv.ru
    Content-Type: text/xml; charset="utf-8"
    Content-Length: nnnn
    
После этого может быть записано тело запроса с данными, которые нужно передать обрабатывающему приложению, например, CGI-программе (в случае использования метода POST).
Методы
Названия методов чувствительны к регистру. В список существующих методов входят [1]:
GET, HEAD, PUT, POST, DELETE, LINK, UNLINK, дополнительные-методы.
Клиент всегда оповещается сервером через код статуса ответа, допускается ли применение данного метода для указанного ресурса.
Метод GET служит для получения любой информации, идентифицированной URI Если ресурс генерирует данные, то в ответе будут присутствовать эти данные.
Метод GET изменяется на "условный GET", если сообщение запроса включает в себя поле заголовка "If-Modified-Since". В этом случае содержательный ответ будет только, если ресурс изменялся после даты, указанной в заголовке "If-Modified-Since". Использование условного GET направлено на разгрузку сети, так как он позволяет не передавать по сети избыточную информацию.
Метод HEAD аналогичен методу GET, за исключением того, что в ответе сервер не возвращает тело- ответа, а передает только метаданные. Примером метаданных могут быть время изменения документа, его размер, тип документа, тип сервера. Метод HEAD разгружает сеть, так как метаданные передаются без самого документа.
Метод POST используется для запроса сервера, чтобы тот принял информацию, включенную в запрос, как направляемую (субординатную) ресурсу, указанному в поле идентификатора ресурса. Метод POST был разработан, чтобы была возможность использовать один общий метод для следующих функций:
Реальная функция, выполняемая методом POST, определяется сервером и обычно зависит от URI-запроса. Добавляемая информация рассматривается как субординатная указанному URI в том же смысле, как файл субординатен каталогу, в котором он находится, новая статья субординатна группе новостей, в которую она добавляется, запись субординатна базе данных.
Клиент может предложить URI для идентификации нового ресурса, включив в запрос заголовок "URI". Тем не менее, сервер должен рассматривать этот URI только как совет и может сохранить тело запроса под другим URI или вообще без него.
Метод PUT запрашивает сервер о сохранении тела-запроса под URI, равным URI-запроса. Если URI-запроса ссылается на уже существующий ресурс, тело-запроса должно рассматриваться как модифицированная версия данного ресурса. Если ресурс, на который ссылается URI-запроса не существует, и данный URI может рассматриваться как описание для нового ресурса, сервер может создать ресурс с данным URI. Если ресурс с указанным URI не может быть создан или модифицирован, должно быть послано соответствующее сообщение об ошибке.
Фундаментальное различие между методами POST и PUT заключается в различном значении поля URI-запроса. Для метода POST данный URI указывает ресурс, который будет управлять информацией, содержащейся в теле запроса, как неким придатком. Ресурс может быть обрабатывающим данные процессом, шлюзом в какой-нибудь другой протокол, или отдельным ресурсом, допускающим аннотации. В противоположность этому, URI для запроса PUT идентифицирует информацию, содержащуюся в содержании-запроса. Использующий запрос PUT точно знает, какой URI он собирается использовать, и получатель запроса не должен пытаться применить этот запрос к какому-нибудь другому ресурсу.
Метод DELETE используется для удаления ресурсов, идентифицированных с помощью URI-запроса.
Метод LINK устанавливает взаимосвязи между существующим ресурсом, указанным в URI-запроса, и другими существующими ресурсами. Отличие метода LINK от остальных методов, допускающих установление ссылок между документами, заключается в том, что метод LINK не позволяет передавать в запросе тела-запроса, и в том, что в результате работы данного метода не создаются новые ресурсы.
Метод UNLINK удаляет одну или более ссылочных взаимосвязей для ресурса, указанного в URI- Запроса.
Поля Заголовка-Запроса позволяют клиенту передавать серверу дополнительную информацию о запросе и о самом клиенте.
Структура ответа
Первая часть ответа - строка статуса, содержащая версию протокола 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 
Если запрос клиента успешен, то сервер посылает затребованные данные. Это может быть копия файла или документ, сформированный в соответствии со сценарием, зафиксированным в документе. Если запрос клиента удовлетворить нельзя, то сервер передает дополнительные данные в виде удобного для человека разъяснения причин, по которым сервер не смог выполнить запрос.
Возможные интерпретации значений кода статуса:
Примеры значений кодов-статуса и соответствующих им фраз-объяснений приведены в табл. 1.
Таблица 1    
Код-СтатусаФраза Объяснения
"200"OK
"201"Created
"202"Accepted
"204"No Content
"304"Not Modified
"400"Bad Request
"402"Payment Required
"403"Forbidden
"404"Not Found
"405"Method Not Allowed
"406"None Acceptable
"407"Proxy Authentication Required
"500"Internal Server Error
"502"Bad Gateway
"504"Gateway Timeout

Тело сообщения
Под телом сообщения понимается Содержание-Запроса или Содержание-Ответа соответственно. Тело сообщения, если оно присутствует, посылается в запросе или ответе в формате и кодировке, определяемыми полями заголовка-Содержания.
Тело сообщения включается в запрос, только если метод запроса подразумевает его наличие. Для спецификации HTTP/1.0 такими методами являются POST и PUT.
Что касается сообщений-ответов, наличие тела сообщения в ответе зависит от метода, который был использован в запросе, и Кода-Статуса. Все ответы на запросы HEAD не должны содержать тело сообщения, хотя наличие некоторых полей Заголовка-Сообщения может указывать на возможное присутствие такового. Соответственно, ответы "204 No Content", "304 Not Modified", и "406 None Acceptable" также не должны включать в себя тело сообщения.
Список литературы
1. http://os2.in.ru/rdm2/articles/http.html