Предыдущий раздел Список разделов Список разделов

HTTP ответ


Структура ответа

После получения и интерпретации запроса, сервер посылает ответ в соответствии со следующей формой:

 Ответ = Простой-Ответ | Полный-Ответ
 Простой-Ответ = [ Содержание-Ответа ]
 Полный-Ответ = Строка-Статуса
    *( Общий-Заголовок | Заголовок-Ответа | Заголовок-Содержания) CRLF
    [ Содержание-Ответа ]
Простой-Ответ должен посылаться только в ответ на HTTP/0.9 Простой-Запрос, или в том случае, если сервер поддерживает только ограниченный HTTP/0.9 протокол. Если клиент посылает HTTP/1.0 Полный-Запрос и получает ответ, который не начинается со Строки-Статуса, он должен предполагать, что ответ сервера представляет собой Простой-Ответ, и обрабатывать его в соответствии с этим. Следует заметить, что Простой-Ответ состоит только из запрашиваемой информации (без заголовков) и поток данных прекращается в тот момент, когда сервер закрывает сеанс связи.

Строка Статуса

Первая строка Полного-Запроса является Строкой-Статуса, состоящей из версии протокола, за которой следует цифровой код статуса и ассоциированное с ним текстовое предложение. Все элементы Строки-Статуса разделены пробелами. Не разрешены символы CR и LF, за исключением завершающей последовательности CRLF.

Строка-Статуса=Версия-HTTP SP Статус-Код SP Фраза-Объяснение.

Так как строка статуса всегда начинается с версии протокола "HTTP/" 1*ЦИФРА "." 1*ЦИФРА (например HTTP/1.0), существование этого выражения рассматривается как основное для определения того, является ли ответ Простым-Ответом, или Полным-Ответом. Хотя формат Простого-Ответа не исключает появления подобной строки (что привело бы к неправильной интерпретации сообщения ответа и принятию его за Полный-Ответ), вероятность такого появления близка к нулю.

Статус-код и пояснение к нему

Элемент Статус-Код представляет собой 3-х цифровой целый код, идентифицирующий результат попытки интерпретации и удовлетворения запроса. Фраза-Объяснение, следующая за ним, предназначена для краткого текстового описания Статус-Кода. Статус-Код нацелен на то, чтобы его использовала машина, а Фраза-Объяснение предназначена для человека. Клиент не обязан исследовать и выводить на экран Фразу-Объяснение.

Первая цифра Статус-Кода предназначена для определения класса ответа. Последние две цифры не выполняют никакой категоризирующей роли. Существует 5 значений для первой цифры:

  1. 1xx: Информационный - Не используется, но зарезервирован для использования в будущем
  2. 2xх: Успех - Запрос был полностью получен, понят, и принят к обработке.
  3. 3xx: Перенаправление - Клиенту следует предпринять дальнейшие действия для успешного выполнения запроса. Необходимое дополнительное действие иногда может быть выполнено клиентом без взаимодействия с пользователем, но настоятельно рекомендуется, чтоб имело место только в тех случаях, когда метод, использующийся в запросе безразличен (GET или HEAD).
  4. 4xx: Ошибка клиента - Запрос, содержащий неправильные синтаксические конструкции, не может быть успешно выполнен. Класс 4xx предназначен для описания тех случаев, когда ошибка была допущена со стороны клиента. Если клиент еще не завершил запрос, ког получил ответ с Кодом-Статуса 4xx, он должен немедленно прекратить передачу данных серверу. Данный тип Кодов-Статуса применим для любых методов, употребляющихся в запросе.
  5. 5xx: Ошибка Сервера - Сервер не смог дать ответ на корректно поставленный запрос. В этих случаях
  6. сервер либо знает, что он допустил ошибку, либо не способен обработать запрос. За исключением ответов на запросы HEAD, сервер посылает описание ошибочной ситуации и то, является ли это состояние временным или постоянным, в Содержании-Ответа. Данный тип Кодов-Статуса применим для любых методов, употребляющихся в запросе.
Отдельные значения Кодов-Статуса и соответствующие им Фразы-Объяснения приведены ниже. Данные Фразы-Объяснения только рекомендуются - они могут быть замещены любыми другими фразами, сохраняющими смысл и допускающимися протоколом.
 Код-Статуса = "200" ; OK |
      "201" ; Created |
      "202" ; Accepted |
      "203" ; Provisional Information |
      "204" ; No Content |

      "300" ; Multiple Choices |
      "301" ; Moved Permanently |
      "302" ; Moved Temporarily |
      "303" ; Method |
      "304" ; Not Modified |

      "400" ; Bad Request |
      "401" ; Unauthorized |
      "402" ; Payment Required |
      "403" ; Forbidden |
      "404" ; Not Found |
      "405" ; Method Not Allowed |
      "406" ; None Acceptable |
      "407" ; Proxy Authentication Required |
      "408" ; Request Timeout |
      "409" ; Conflict |
      "410" ; Gone |

      "500" ; Internal Server Error |
      "501" ; Not Implemented |
      "502" ; Bad Gateway |
      "503" ; Service Unavailable |
      "504" ; Gateway Timeout |
      Код-Рассширения

 Код-Расширения = 3ЦИФРА
 Фраза-Объяснение = строка *( SP строка )
От HTTP приложений не требуется понимание всех Кодов-Статуса, хотя такое понимание, очевидно, желательно. Тем не менее, от приложений требуется способность распознавания классов кодов статуса (идентифицирующихся первой цифрой) и отношение ко всем кодам статуса ответа, как если бы они были эквивалентны кодам статуса x00.

Поля Заголовка-Ответа

Поля заголовка ответа позволяют серверу передать дополнительную информацию об ответе, которая не может быть внесена в Строку-Статуса. Эти поля заголовков не предназначены для передачи информации о содержании ответа, передаваемого в ответ на запрос, но там может быть информация собственно о сервере.

Заголовок-Ответа= Public | Retry-After | Server | WWW-Authenticate | extension-header

Хотя дополнительные поля заголовка ответа могут быть реализованы через механизм расширения, приложения, которые не распознают эти поля должны обрабатывать их как поля Заголовка-Содержания. Полное описание этих полей можно получить в спецификации протокола HTTP в CERN.


Kir
Танаев А.