Ответ
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 — это чтобы все жили дружно. Ну, в рот меня чих-пых, вроде понятно?