Метод POST и его особенности. Области применения. Привести примеры. Формат URL. Параметры запроса, привести примеры

Применяется для передачи пользовательских данных заданному ресурсу. Например, в блогах посетители обычно могут вводить свои комментарии к записям в HTML-форму, после чего они передаются серверу методом POST и он помещает их на страницу. При этом передаваемые данные (в примере с блогами — текст комментария) включаются в тело запроса. Аналогично с помощью метода POST обычно загружаются файлы на сервер.

В отличие от метода GET, метод POST не считается идемпотентным[4], то есть многократное повторение одних и тех же запросов POST может возвращать разные результаты (например, после каждой отправки комментария будет появляться одна копия этого комментария).

При результате выполнения 200 (Ok) в тело ответа следует включить сообщение об итоге выполнения запроса. Если был создан ресурс, то серверу следует вернуть ответ 201 (Created) с указанием URI нового ресурса в заголовке Location.

Сообщение ответа сервера на выполнение метода POST не кэшируется.

Охарактеризовать основные параметры, описывающие характеристики HTTP запроса. Привести примеры

Host Доменное имя или IP-адрес узла, к которому обращается клиент

Referer URL документа, который ссылается на ресурс, указанный в строке состояния

From Адрес электронной почты пользователя, работающего с клиентом

Accept MIME-типы данных, обрабатываемых клиентом. Это поле может иметь несколько значений, отделяемых одно от другого запятыми. Часто поле заголовка Accept используется для того, чтобы сообщить серверу о том, какие типы графических файлов поддерживает клиент

Accept-Language Набор двухсимвольных идентификаторов, разделенных запятыми, которые обозначают языки, поддерживаемые клиентом

Accept-Charset Перечень поддерживаемых наборов символов

Content-Type MIME-тип данных, содержащихся в теле запроса (если запрос не состоит из одного заголовка)

Content-Length Число символов, содержащихся в теле запроса (если запрос не состоит из одного заголовка)

Range Присутствует в том случае, если клиент запрашивает не весь документ, а лишь его часть

Connection Используется для управления TCP-соединением. Если в поле содержится Close, это означает, что после обработки запроса сервер должен закрыть соединение. Значение Keep-Alive предлагает не закрывать TCP-соединение, чтобы оно могло быть использовано для последующих запросов

User-Agent Информация о клиенте

Охарактеризовать основные параметры, описывающие характеристики тела HTTP запроса. Привести примеры.

HTTP (HyperText Transfer Protocol - RFC 1945, RFC 2616) - протоколприкладногоуровнядляпередачигипертекста.

Во многих случаях при работе в Веб тело запроса отсутствует. При запуске CGI-сценариев данные, передаваемые для них в запросе, могут размещаться в теле запроса.

· Entity-Header — часть заголовка, описывающая данные Entity-Body.
В данной части запроса задаются параметры, которые описывают тело страницы. Entity-Header можетсодержатьследующиепараметры: Allow, Content-Encoding, Content-Length, Content-Type, Expires, Last-Modified, extension-header.

· Allow — задает допустимые методы обработки.
Формат: "Allow: GET | HEAD\n".
Параметр игнорируется при указании метода обработки POST в Request-Line. Задает допустимые методы обработки запроса. Прокси сервера не модифицируют параметр Allow и он в неизменном виде доходит до сервера..

· Content-Encoding —типкодированияданных Entity-Body.
Формат: "Сontent-Encoding: x-gzip | x-compress | другойтип\n".
Пример: "Сontent-Encoding: x-gzip\n". Символ "|" означает слово "или", то есть то или то или то и.т.д.
Другой тип может указывать на способ кодирования данных, например, для метода POST: "Сontent-Encoding: application/x-www-form-urlencoded\n".

· Content-Length — количество байт, пересылаемых в Entity-Body. Значение Content-Length имеет совсем другой смысл для данных, пересылаемых в формате MIME, где он выступает как параметр описания части данных — "external/entity-body". Допустимыми являются целые числа от нуля и больше.
Пример: "Content-Length: 26457\n".

· Content-Type MIME-тип данных, содержащихся в теле запроса (если запрос не состоит из одного заголовка).
Например: "Content-Type: text/html\n".

· Expires — Время, когда страница должна быть удалена из кэша браузера.
Формат: "Expires: date\n". Формат даты алогичен формату даты для параметра Date из General-Header.

· Last-Modified — время последнего изменения пересылаемых данных.
Формат: "Last-Modified: date\n". Формат даты алогичен формату даты для параметра Date из General-Header.

· Extention-header — часть заголовка, которая может предназначаться, например, для обработки браузером, или другой программой, которая принимает документ. В данной части можно описывать свои параметры в формате "ParameterName: parametervalue\n". Данные параметры будут игнорироваться, если программа-клиент не знает, как их обработать.
Например: "Cookie: r=1\r\n" — устанавливает всем известные печеньки для страницы.

Пример:

POST http://www.site.ru/news.html HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: income=1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 35\r\n
\r\n
login=Petya%20Vasechkin&password=qq

Здесь мы видим пример использования Content-Type и Content-Length полей заголовка. Content-Length говорит, сколько байт будет занимать область данных, которая отделяется от заголовка еще одним переводом строки \r\n. А вот параметры, которые раньше для запроса GET помещались в Request-URI, теперь находятся в Entity-Body. Видно, что они формируются точно также, просто надо написать их после заголовка.