Коды ответов и заголовки. HTTPS

В прошлом уроке мы разобрали методы запроса и идемпотентность — разные способы «попросить» сервер что-то сделать. Сервер получил запрос и как-то отреагировал. Но как понять ПО ОТВЕТУ, что вообще произошло: успех, ошибка, и если ошибка — то по чьей вине, клиента или сервера?

Чему научишься за этот урок:
— по первой цифре кода ответа определять класс результата (успех, редирект, ошибка клиента, ошибка сервера);
— по коду ответа говорить, чья это ошибка — клиента или сервера;
— объяснить, что такое заголовки запроса и ответа и зачем нужен HTTPS.

Коды ответа: три цифры, которые говорят многое

Код ответа (status code) — трёхзначное число, которое сервер возвращает вместе с каждым HTTP-ответом. Первая цифра сама по себе задаёт класс результата — не нужно помнить наизусть все коды, чтобы понять общий смысл ответа.

  • 2xx — успех: запрос выполнен так, как задумано. 200 OK — запрос выполнен успешно; 201 Created — новая сущность создана.
  • 3xx — редирект: ресурс переехал в другое место. 301 — ресурс постоянно перемещён.
  • 4xx — ошибка на стороне клиента: проблема в том, что отправил или запросил клиент. 400 Bad Request — неверный запрос; 401 Unauthorized — не авторизован, нужна аутентификация; 403 Forbidden — авторизован, но доступ запрещён; 404 Not Found — ресурс не найден.
  • 5xx — ошибка на стороне сервера: проблема внутри сервера, даже если клиент отправил всё правильно. 500 Internal Server Error — внутренняя ошибка сервера; 502 Bad Gateway — промежуточный сервер получил неверный ответ от вышестоящего; 503 Service Unavailable — сервис временно недоступен, например перегружен.

Кто виноват: клиент или сервер

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

Практическое правило для старта диагностики: при 4xx начинать поиск стоит с того, что отправил клиент — данных, прав, адреса запроса (хотя иногда причина всё равно окажется в конфигурации сервера или в контракте между фронтом и бэком). При 5xx клиент, скорее всего, ни при чём, даже если отправил всё верно, — сервер не справился сам.

Заголовки

Заголовки (headers) — дополнительная информация, которая идёт вместе с запросом или ответом, но не является основным телом данных. Например: Content-Type сообщает, какого типа данные передаются (JSON, HTML и так далее); Authorization несёт данные для авторизации — например, токен, подтверждающий, что запрос отправлен от имени вошедшего пользователя.

HTTPS = HTTP + шифрование

HTTPS — это тот же HTTP, дополненный шифрованием с помощью протокола TLS. Данные между клиентом и сервером передаются в зашифрованном виде, что мешает третьим лицам их перехватить и прочитать — например, в открытой Wi-Fi сети в кафе.

Класс | Значение          | Примеры
------+-------------------+---------------------------------
 2xx  | успех             | 200 OK, 201 Created
 3xx  | редирект          | 301
 4xx  | ошибка КЛИЕНТА    | 400, 401, 403, 404
 5xx  | ошибка СЕРВЕРА    | 500, 502, 503

Итог:
— код ответа — первая подсказка, где искать причину проблемы;
— 4xx — сторона клиента, 5xx — сторона сервера, и это не совпадение, а прямое указание;
— заголовки — дополнительная информация при запросе/ответе (например, Content-Type, Authorization);
— HTTPS = HTTP + шифрование (протокол TLS).

Контрольный вопрос. Первая цифра кода ответа задаёт класс результата. Какой из вариантов описывает класс кодов, где проблема — в том, что отправил или запросил клиент?

АКоды 4xx — ошибка в том, что отправил или запросил клиент
БКоды 5xx — ошибка внутри самого сервера
ВКоды 2xx — запрос выполнен успешно

Подсказка: Речь о ситуации, когда сервер работает исправно, но то, что ему прислали, было неверным или недопустимым.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Ученик перешёл по ссылке на курс, которого больше не существует. Какой код ответа означает «ресурс не найден»?

А404 Not Found
Б403 Forbidden
В401 Unauthorized

Подсказка: Название кода в английском языке дословно означает «не найдено».

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Заявка ученика на запись на курс успешно сохранена в базе данных, и сервер вернул код 201. Это ошибка на стороне клиента, ошибка на стороне сервера или успешный результат?

АУспешный результат — новая сущность создана
БОшибка на стороне клиента
ВОшибка на стороне сервера

Подсказка: Класс 2xx в принципе не про ошибки — вспомни, что объединяет коды этого класса.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Что такое заголовки (headers) HTTP-запроса или ответа?

АДополнительная информация (например, тип данных или данные авторизации), которая идёт вместе с запросом/ответом, но не является основным телом данных
БОсновной текст данных, который запросил клиент
ВЕщё одно название для кода ответа

Подсказка: Подумай про Content-Type и Authorization — это не сами данные, а сведения о них.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. HTTPS — это HTTP, дополненный шифрованием с помощью протокола, который защищает данные от перехвата третьими лицами. Как называется этот протокол? Ответь одним словом (аббревиатура из трёх латинских букв).

Подсказка: Эта аббревиатура обычно упоминается рядом со словом HTTPS, когда объясняют, откуда берётся шифрование.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Какие из перечисленных кодов относятся к ошибкам НА СТОРОНЕ СЕРВЕРА (выбери все подходящие)?

Выберите все верные варианты.

А500 Internal Server Error
Б502 Bad Gateway
В503 Service Unavailable
Г404 Not Found
Д401 Unauthorized

Подсказка: Такие ошибки происходят, даже если клиент отправил абсолютно всё правильно, — дело в самом сервере.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Контрольный вопрос. Пользователь успешно вошёл в систему (аутентификация пройдена), но пытается открыть админ-панель, доступ к которой ему не разрешён. Какой код вернёт сервер?

А403 Forbidden
Б401 Unauthorized
В400 Bad Request

Подсказка: Пользователь уже доказал, кто он, — вопрос не в том, кто он, а в том, что ему разрешено делать.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Задание. Ученик, не выполнивший вход в систему, попытался открыть страницу личного кабинета на нашем полигоне. Сервер вернул код 401. Чья это зона ответственности по правилу из урока? Ответь одним словом.

Подсказка: Посмотри, к какому классу кодов относится 401, и вспомни общее правило про этот класс.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Задание. Ученик перешёл по неверной (несуществующей) ссылке на страницу курса, и сервер вернул код 404. По правилу из урока чья это зона ответственности? Ответь одним словом.

Подсказка: 404 относится к тому же классу кодов, что и 401 из предыдущего задания.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Задание. Ученик оформлял оплату курса, всё ввёл верно, но в момент отправки данных сервер оказался перегружен и вернул код 500. Объясни в 2-3 предложениях: чья это зона ответственности по правилу из урока и почему в этом случае нет смысла просить ученика перепроверить введённые данные.

Критерий приёмки: указано, что 500 — ошибка НА СТОРОНЕ СЕРВЕРА (класс 5xx), и объяснено, что проблема не в данных, которые отправил клиент, а во внутреннем сбое сервера — поэтому перепроверка ввода ученика не поможет.

Подсказка: Подумай, при каком классе кодов дело вообще не в том, что и как ввёл пользователь.

✅ Готово, если: программа запускается без ошибок и выводит то, что просят в задании.

Онлайн-проверка ответа появится позже

Задание. Ученик дважды пытался оплатить курс. Первая попытка: он оставил поле номера карты пустым, и сервер вернул код из класса 4xx. Он исправил поле и отправил снова — на этот раз сервер начал обрабатывать платёж, но в процессе сам упал и вернул код из класса 5xx. По правилу из урока, зоной чьей ответственности является ПЕРВАЯ из этих двух ошибок? Ответь одним словом.

Подсказка: Один из двух классов кодов относится к ошибкам того, кто отправил запрос, другой — к ошибкам того, кто его обрабатывал; вспомни, какой класс отвечает за что по смыслу, а не по порядку в тексте.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →

Что дальше

Мы научились по коду ответа понимать, где искать причину проблемы. Но как сервер вообще «запоминает», что вы уже вошли в систему, если каждый отдельный HTTP-запрос сам по себе независим и «не помнит» предыдущий? Разберём это в следующем уроке: cookies, кэш, хранилища браузера и разница между аутентификацией и авторизацией.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева