Этот запрос отличается от предыдущего тем, что в нем используется метод POST, который также загружает данные на сервер. При этом сами данные содержаться в теле HTTP-запроса после пустой строки.
HTTP-ответ генерируется веб-сервером в ответ на поступивший HTTP-запрос. По своей структуре он схож с HTTP-запросом, но имеет определенные отличия. Главное отличие содержится в первой строке. Вместо имени запрашиваемого ресурса и метода запроса в ней указывается статус ответа. Статус указывает на то, насколько успешно выполнился HTTP-запрос. Например, в случае, если документ найден на сервере и может быть выдан клиенту, то статус имеет значение "ОК", которое говорит о том, что запрос выполнился успешно. Однако, могут появляться исключительные ситуации – например, документ отсутствует на сервере или у пользователя отсутствуют права на получение ресурса. Набор всевозможных статусных сообщений HTTP-ответа мы рассмотрим далее в этой лекции. Таким образом, первая строка HTTP-ответа может принимать значение "HTTP/1.1 200 OK". HTTP-заголовки в HTTP-ответе также являются важным элементом. Они характеризуют содержимое, которое передается клиенту. Например, в этих HTTP-заголовках может содержаться информация о типе содержимого (HTML-документ, изображение и т.д.), длине содержимого (размер в байтах), дате модификации, режиме кэширования и др. Все эти заголовки влияют на способ отображения данных на клиенте, а также устанавливают правила хранения данных в клиентском кэше. Типичный вид HTTP-ответа может быть следующим.
В приведенном примере сервер указывает, что ресурс найден, его тип – HTML-документ, а также указывает размер и дату модификации. После пустой строки идет содержимое HTML-документа, т.е. по сути то, что запрашивал клиент. Как и в случае с HTTP-запросом, в HTTP-ответе количество заголовков может изменяться на усмотрение веб-сервера.
При рассмотрении структуры HTTP-запроса было затронуто понятие метода HTTP-запроса. Метод HTTP-запроса определяет каким образом будет обрабатываться указанный HTTP-запрос, т.е. в каком-то смысле определяет его семантику. Поскольку HTTP-запросы могут иметь самый разнообразный смысл, то указание метода является важной частью построения HTTP-запроса. HTTP-запросы могут иметь следующие значения: запрос ресурса от сервера, создание или изменение ресурса на сервере, удаление ресурса на сервере и т.д.
Наиболее распространенными методами HTTP-запроса являются следующие типы методов:
GET | позволяет получить информацию от сервера, тело запроса всегда остается пустым; |
HEAD | аналогичен GET, но тело ответа остается всегда пустым, позволяет проверить доступность запрашиваемого ресурса и прочитать HTTP-заголовки ответа; |
POST | позволяет загрузить информацию на сервер, по смыслу изменяет ресурс на сервере, но зачастую используется и для создания ресурса на сервере, тело запроса содержит изменяемый/создаваемый ресурс; |
PUT | аналогичен POST, но по смыслу занимается созданием ресурса, а не его изменением, тело запроса содержит создаваемый ресурс; |
DELETE | удаляет ресурс с сервера. |
Кроме указанных методов HTTP, существует еще большое количество других методов, определенных в спецификации протокола HTTP. Однако, несмотря на это, браузерами зачастую используются только методы GET и POST. Тем не менее, другие прикладные приложения могут использовать HTTP-методы по своему усмотрению.
Как мы увидели ранее, в составе HTTP-ответа содержится статусный код или код возврата. Этот статус показывает состояние HTTP-ответа, которое получено от сервера. Этот механизм является необходимым при функционировании протокола HTTP, поскольку при обработке запроса могут встречаться различные нестандартные ситуации. Все статусные коды являются трехзначными числами. Кроме того, в составе HTTP-ответа может присутствовать текстовое описание состояния. Все статусные коды делятся на пять групп.
Каждая группа статусных кодов идентифицирует ситуацию, в которой оказался запрос. Группа определяется первым разрядом статусного кода. Например, статусные коды группы 2xx говорят об успехе выполнения HTTP-запроса. Наиболее используемые статусные коды приведены в таблице ниже.
Код | Описание | |
1xx | Информационные коды | |
2xx | Успешное выполнение запроса | |
Запрос был обработан успешно | ||
Объект создан | ||
Информация принята | ||
Информация, которая не заслуживает доверия | ||
Нет содержимого | ||
Сбросить содержимое | ||
Частичное содержимое (например, при "докачке" файлов) | ||
3xx | Перенаправление (чтобы выполнить запрос, нужны какие-либо действия) | |
Несколько вариантов на выбор | ||
Ресурс перемещен на постоянной основе | ||
Ресурс перемещен временно | ||
Смотрите другой ресурс | ||
Содержимое не изменилось | ||
Используйте прокси-сервер | ||
4xx | Проблема связана не с сервером, а с запросом | |
Некорректный запрос | ||
Нет разрешения на просмотр ресурса | ||
Требуется оплата | ||
Доступ запрещен | ||
Ресурс не найден | ||
Недопустимый метод | ||
Неприемлемый запрос | ||
Необходима регистрация на прокси-сервере | ||
Время обработки запроса истекло | ||
Конфликт | ||
Ресурса больше нет | ||
Необходимо указать длину | ||
Не выполнено предварительное условие | ||
Запрашиваемый элемент слишком велик | ||
Идентификатор ресурса (URI) слишком длинный | ||
Неподдерживаемый тип ресурса | ||
5xx | Ошибки на сервере | |
Внутренняя ошибка сервера | ||
Функция не реализована | ||
Дефект шлюза | ||
Служба недоступна | ||
Время прохождения через шлюз истекло | ||
Неподдерживаемая версия HTTP |