Коды ответов и заголовки. 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).

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

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

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

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

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

А401 Unauthorized
Б403 Forbidden
В404 Not Found

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

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

Контрольный вопрос. Заявка ученика на запись на курс успешно сохранена в базе данных, и сервер вернул код 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

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

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

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

А401 Unauthorized
Б400 Bad Request
В403 Forbidden

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что дальше

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

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

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