Тема 5: HTTP ответы сервера: строка состояния HTTP ответа, коды состояния, заголовки HTTP ответа, примеры

Привет, читатель блога ZametkiNaPolyah.ru! Продолжим знакомиться с протоколом HTTP в рубрике серверы и протоколы и ее разделе HTTP протокол. В этой записи мы с тобой разберем, как отвечает HTTP сервер на запросы клиента. Как всегда: понятно и с примерами, но если тебе что-то будет непонятно — не стесняйся спросить в комментариях. Ответ ты получишь, как минимум, HTTP. Как ты уже догадался, в этой записи мы с тобой будем говорить про HTTP ответы сервера, а конкретнее: про строку состояния HTTP ответа сервера, немного поговорим про коды состояния HTTP ответа, посмотрим какие заголовки сервер может посылать в ответ на запрос и разберем несколько примеров HTTP ответа сервера.

HTTP ответы сервера: строка состояния HTTP ответа, коды состояния, заголовки HTTP ответа, примеры

HTTP ответы сервера: строка состояния HTTP ответа, коды состояния, заголовки HTTP ответа, примеры


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

Если вы хотите узнать всё про протокол HTTP, обратитесь к навигации по рубрике HTTP протокол. HTTP ответы – это HTTP сообщение, которое посылает сервер в ответ на запрос клиента. Ответы HTTP сервера строго регламентированы и имеют четкую структуру. Структура HTTP ответа сервера состоит из:

  1. Строки состояния HTTP ответа, в которой сервер указывает версию HTTP протокола и код состояния.
  2. Нуля или нескольких полей HTTP заголовка, разделенных между собой символом CRLF.
  3. Пустой строки (в этой строке должен быть только символ CRLF), эта строка обозначает окончание полей заголовка.
  4. Необязательное тело HTTP сообщения.

Для тех кому непонятно словесное описание структуры HTTP ответа сервера приведем пример:

Мы обозначили структуру HTTP ответа сервера. Давайте теперь рассмотрим каждую из составляющих HTTP ответа сервера в отдельности.

Строка состояния HTTP ответа сервера

Первая строка в HTTP ответе – это строка состояния, иначе Status-Line. Она состоит из версии протокола HTTP, числового кода состояния HTTP сервера и поясняющей фразы. Окончание строки состояния в HTTP ответе является символ CRLF. Пример строки состояния HTTP ответа сервера:

Вот таким нехитрым образом записывается строка состояния в HTTP ответ. Да, кстати, строка состояния — это параметр HTTP.

Код состояния HTTP ответа и поясняющая фраза

О кодах состояния HTTP ответа я планирую написать несколько отдельных публикаций с пояснениями и дополнениями, а вот в этой записи мы ограничимся лишь кратким обзором кодов состояний HTTP ответа, иначе статья была бы не полной.

Вообще, правильно говорить элемент кода состояния или Status-Code – это целочисленный трехразрядный код результата понимания и удовлетворения запроса клиента. Грубо говоря, это число, которое показывает то, как сервер понял запрос клиента. К коду состояния HTTP ответа идет поясняющая фраз, которая предназначена для людей, чтобы те понимали, что в итоге случилось. Давайте сведем в таблицу коды состояний  HTTP сервера и дадим к ним пояснения:

Номер Код состояния HTTP сервера и его описание
1 1xx: информационный код состояния HTTP сервера

Все коды состояний, начинающиеся с единицы говорят клиенту о том, что их запрос получен и находится в обработке  и называются они — информационные коды состояния.
2 2xx: успешный код состояния HTTP сервера

Все коды состояний, начинающиеся с двойки говорят клиенту о том, что действие закончилось успешно: получено, понято и обработано, такие коды называются успешные HTTP коды.
3 3xx: код перенаправления HTTP сервера

Все коды состояния, начинающиеся с тройки говорят клиенту о том, что для продолжения работы ему нужно совершить какие-то действия, это коды получили название кодов перенаправления HTTP сервера.
4 4xx: коды ошибок HTTP клиента

Все коды состояния, начинающиеся с четверки говорят нам о том, что ошибка происходит по вине клиента (неверный синтаксис, устаревший протокол и прочее), из-за чего сервер не может корректно отработать и дать ответ. Их называют коды ошибок HTTP клиента.
5 5xx: коды ошибок HTTP сервера

Все коды состояний, начинающиеся с пятерки, говорят нам о том, что произошла ошибка на стороне сервера HTTP. И они получили называние коды ошибок HTTP сервера.

 

Приведем набор кодов состояний в HTTP и поясняющие фразы к ним:

Хочу обратить ваше внимание на то, что поясняющая фраза является рекомендацией стандарта HTTP и может быть заменена сервером на свою. Так же стоит заметить, что коды состояний HTTP ответа расширяемы и клиенту не обязательно понимать значения всех кодов состояний, однако каждый клиент должен понимать класс кода состояний, который обозначен первой цифрой.

Поля заголовка HTTP ответа

Поля заголовка HTTP ответа необходимы серверу для того, чтобы передать дополнительную информацию клиенту, которая не может быть помещена в строку состояния. Поля заголовка HTTP ответа помогают клиенту правильно обработать HTTP сообщение сервера. Так же поля заголовка HTTP ответа могут содержать дополнительную информацию о сервере и о дальнейшем доступе к ресурсу, указанному в URI (URI в HTTP):

Если вы собрались написать свой HTTP сервер, то без проблем сможете расширить поля заголовка HTTP ответов, это не рекомендуется стандартом, но все же делается и, в принципе, клиенты понимают такое расширение и корректно его отрабатывают. Тут главное соблюдать HTTP требования.

Пример HTTP ответа сервера

Давайте теперь посмотрим пример HTTP ответа сервера, помните, мы запрашивали у сервера HTML документ в записи про HTTP запросы? Давайте теперь посмотрим, какой ответ нам даст HTTP сервер:

А теперь давайте посмотрим, какой ответ нам даст HTTP сервер, если произойдет ошибка и сервер не сможет найти требуемую нам страницу:

И третий пример покажет нам, что ответит HTTP сервер, если обнаружит, что клиент пользуется другой версией HTTP протокола:

Вот так легко и просто мы разобрались с HTTP ответами сервера.

5 комментариев к записи Тема 5: HTTP ответы сервера: строка состояния HTTP ответа, коды состояния, заголовки HTTP ответа, примеры

webLamer

Спасибо за полное разъяснения кодов состояний ответ сервера и за полный список кодов в HTTP ответах, этой страничкой, как справочником пользоваться буду: очень удобно, когда всё в одном месте!

Колясик

Вы писали про символ CRLF, что это такое, я понимаю, что вопрос не про HTTP ответы, так всё понятно, кроме этого преславутого CRLF.

Кирилл

Символ CRLF — свдивунть каретку перетянуть бумагу, что-то вроде этого, этот символ идет со времен мейнфреймов и означает перевод на новую строку. В сообщениях HTTP, не важно, запрос то или ответ, данный символ означает окончание строки. Если строка содержит только символ CRLF, то это означает окончание блока.

Котейка

Кирилл, спасибо, как всегда — отлично, ясно и доступно! 🙂 Только вот не понятно какие значения могут быть в полях заголовка? Все ваши публикации пересмотрела и про сообщения и про ответа, и даже про запросы, дошла до самых первых статей в рубрике HTTP, но ответа не нашла 🙁

Кирилл

Про поля заголовков в HTTP сообщениях будет отдельная публикация, надеюсь, что скоро!

Текст комментария: