Какие основные классы HTTP статус-кодов вы знаете? Приведите примеры.

Ответ

HTTP статус-коды — это трёхзначные числа, сгруппированные по первой цифре в 5 классов. Они сообщают клиенту о результате выполнения его запроса.

Класс Диапазон Назначение
1xx 100-199 Информационные. Запрос получен, процесс продолжается. Клиент должен ждать окончательного ответа. В повседневной веб-разработке встречаются редко.
2xx 200-299 Успех. Запрос был успешно получен, понят и обработан.
3xx 300-399 Перенаправление. Для завершения запроса требуется дополнительное действие (например, переход по другому URL).
4xx 400-499 Ошибка клиента. Запрос содержит некорректный синтаксис или не может быть выполнен сервером по вине клиента (неверный URL, отсутствие прав и т.д.).
5xx 500-599 Ошибка сервера. Сервер не смог выполнить заведомо корректный запрос из-за внутренней ошибки.

Практические примеры часто используемых кодов:

2xx (Успех):

  • 200 OK — Стандартный ответ для успешных GET, PUT, PATCH запросов. Тело ответа содержит запрошенные данные.
  • 201 Created — Запрос (обычно POST) привёл к созданию нового ресурса. В заголовке Location часто возвращается URI созданного ресурса.
  • 204 No Content — Сервер успешно обработал запрос (например, DELETE), но не возвращает никакого содержимого в теле ответа.

3xx (Перенаправление):

  • 301 Moved Permanently — Ресурс навсегда перемещён на новый URL. Браузеры и поисковики обновляют ссылки.
  • 302 Found — Ресурс временно доступен по другому URL. Метод запроса при редиректе может измениться на GET (используйте 307 или 308 для сохранения метода).
  • 304 Not Modified — Используется для кэширования. Клиент уже имеет актуальную версию ресурса (отправляет заголовки If-Modified-Since или If-None-Match).

4xx (Ошибка клиента):

  • 400 Bad Request — Общая ошибка, сервер не может обработать запрос из-за неверного синтаксиса (например, некорректный JSON в теле).
  • 401 Unauthorized — Требуется аутентификация. Клиент не предоставил или предоставил неверные учётные данные.
  • 403 Forbidden — Сервер понял запрос, но отказывается его авторизовать (у клиента нет необходимых прав).
  • 404 Not Found — Самый известный код. Сервер не нашёл запрошенный ресурс.
  • 429 Too Many Requests — Клиент отправил слишком много запросов за короткое время (ограничение rate limiting).

5xx (Ошибка сервера):

  • 500 Internal Server Error — Общая ошибка сервера, когда более конкретный код 5xx не подходит.
  • 502 Bad Gateway — Сервер, выступая в роли шлюза или прокси, получил недопустимый ответ от вышестоящего сервера.
  • 503 Service Unavailable — Сервер временно не может обрабатывать запросы (перегрузка, техобслуживание). Часто сопровождается заголовком Retry-After.
  • 504 Gateway Timeout — Сервер, выступая в роли шлюза или прокси, не дождался ответа от вышестоящего сервера.

Пример обработки в коде (Node.js с Express):

const express = require('express');
const app = express();

app.get('/api/users/:id', (req, res) => {
  const userId = req.params.id;
  const user = findUserInDatabase(userId); // Предположим, это функция поиска

  if (!user) {
    // 4xx ошибка: клиент запросил несуществующий ресурс
    return res.status(404).json({ error: 'User not found' });
  }

  // 2xx успех: возвращаем данные
  res.status(200).json(user);
});

app.post('/api/data', (req, res) => {
  try {
    // ... обработка данных ...
    // 2xx успех: ресурс создан
    res.status(201).json({ id: newId, message: 'Data created successfully' });
  } catch (err) {
    // 5xx ошибка: что-то пошло не так на сервере
    console.error('Server error:', err);
    res.status(500).json({ error: 'Internal server error' });
  }
});

app.listen(3000, () => console.log('Server running on port 3000'));

Ответ 18+ 🔞

А, ну вот, опять про эти цифры, которые сервер тебе тычет в морду, когда ты к нему лезешь. Слушай, это же как язык, блядь, надо понимать, что он тебе хочет сказать, а то будешь как Герасим — «Му-му» и нихуя не врубаться.

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

1xx (100-199) — Информационные.
Это типа «я тебя услышал, чувак, не дёргайся, ща подумаю». В обычной жизни их почти не видишь, они где-то там внутри шипят, как пар в чайнике.

2xx (200-299) — Успех.
Вот это любовь! Всё прошло гладко, как по маслу. Запрос принят, понят, и тебе в ответ прислали то, что ты хотел, или сделали, что ты просил. Идеальный мир, епта.

3xx (300-399) — Перенаправление.
Сервер такой: «Не тут, дружок, иди нахуй в другое место». То есть ресурс переехал, или тебе нужно сделать ещё один шаг. Браузер обычно сам за тебя бегает по этим ссылкам, как собачка.

4xx (400-499) — Ошибка клиента.
А вот это уже твои косяки, блядь. Ты накосячил в запросе. Либо адрес кривой написал, либо пароль не тот, либо права не те. Сервер в принципе работает, но тебя он обслуживать отказывается. Сам дурак.

5xx (500-599) — Ошибка сервера.
А это уже сервер обосрался, простите за мой французский. Ты всё сделал правильно, а у него там внутри что-то пошло не так. База упала, код сглючил, память кончилась. Его проблемы, но страдаешь-то ты.


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

Из семейства успешных (2xx):

  • 200 OK — Всё заебись. Стандартный ответ, когда тебе отдали данные (GET) или приняли твои правки (PUT, PATCH).
  • 201 Created — Во, красота! Ты что-то создал (обычно POST-запросом), и сервер тебе даже ссылку на новую сущность может дать.
  • 204 No Content — Всё сделал, но тебе нихуя не верну. Типа «удалил и молчи». Тела ответа нет, только заголовки.

Из семейства беготни (3xx):

  • 301 Moved Permanently — Переехал навсегда. Запомни новый адрес и больше сюда не ходи. Поисковики тоже адрес обновят.
  • 302 Found — Временно живу в другом месте. Иди туда, но метод запроса (POST, например) может сломаться в GET. Для надёжности есть 307 и 308.
  • 304 Not Modified — У тебя и так свежая версия, зачем меня грузил? Сиди на своей кэшированной копии и не пизди.

Из семейства «сам дурак» (4xx):

  • 400 Bad Request — Ты прислал какую-то хуйню, которую сервер не смог разобрать. JSON кривой, поля не те — в общем, иди переделывай.
  • 401 Unauthorized — Предъяви документы. Ты не авторизован, либо логин/пароль — говно.
  • 403 Forbidden — Я тебя узнал, но ты сюда не пройдёшь. Прав нет, иди нахуй.
  • 404 Not Found — Классика жанра. Искомого не обнаружено. Страница, юзер, файл — нихуя.
  • 429 Too Many Requests — Ой, ну ты и заспамил! Успокойся, подожди, потом попробуй. Rate limiting, мать его.

Из семейства «сервер обосрался» (5xx):

  • 500 Internal Server Error — Универсальная отмазка. На сервере случился пиздец, но стыдно признаться, в чём именно.
  • 502 Bad Gateway — Сервер-прокси получил какую-то дичь от другого сервера и сам в ауте. Плохой шлюз, блядь.
  • 503 Service Unavailable — Сервер перегружен или на техобслуживании. «Занято, перезвоните». Иногда пишут, когда перезвонить (Retry-After).
  • 504 Gateway Timeout — Прокси ждал-ждал ответа от другого сервиса, да так и не дождался. Таймаут, ебать.

Ну и как это выглядит в коде, чтоб ты понимал, где эти статусы впендюривать:

const express = require('express');
const app = express();

app.get('/api/users/:id', (req, res) => {
  const userId = req.params.id;
  const user = findUserInDatabase(userId); // Допустим, ищем в базе

  if (!user) {
    // Клиент ищет то, чего нет — его косяк, 404.
    return res.status(404).json({ error: 'User not found' });
  }

  // Нашёл — отдаём с почестями, 200 OK.
  res.status(200).json(user);
});

app.post('/api/data', (req, res) => {
  try {
    // ... делаем что-то умное ...
    // Всё получилось — 201, создано!
    res.status(201).json({ id: newId, message: 'Data created successfully' });
  } catch (err) {
    // А тут что-то пошло не так на нашей стороне — 500, обосрались.
    console.error('Server error:', err);
    res.status(500).json({ error: 'Internal server error' });
  }
});

app.listen(3000, () => console.log('Server running on port 3000'));

Вот и весь сказ. Главное — не путай, кто виноват: 4xx — ты, 5xx — они. А 2xx — это чтобы все жили дружно. Ну, в рот меня чих-пых, вроде понятно?