Ответ
Коды состояния HTTP (Status Codes) — трехзначные числа, которые сервер возвращает клиенту для информирования о результате обработки запроса. Они сгруппированы по первой цифре:
1xx: Информационные (Informational)
- 100 Continue: Сервер готов принять тело запроса (используется с
Expect: 100-continue).
2xx: Успех (Success)
- 200 OK: Стандартный ответ для успешных GET, POST, PUT или DELETE запросов.
- 201 Created: Запрос выполнен, новый ресурс создан (типичный ответ на успешный POST). В заголовке
Locationчасто возвращается URI созданного ресурса. - 204 No Content: Сервер успешно обработал запрос, но не возвращает никакого контента в теле ответа (например, после успешного DELETE).
3xx: Перенаправление (Redirection)
- 301 Moved Permanently: Ресурс навсегда перемещен на новый URI.
- 302 Found / 307 Temporary Redirect: Ресурс временно доступен по другому URI. 307 сохраняет метод исходного запроса.
4xx: Ошибка клиента (Client Error)
- 400 Bad Request: Сервер не может обработать запрос из-за некорректного синтаксиса (например, невалидный JSON).
- 401 Unauthorized: Для доступа к ресурсу требуется аутентификация. Клиент должен предоставить корректные учетные данные.
- 403 Forbidden: Сервер понял запрос, но отказывается его авторизовать. Проблема в правах, а не в аутентификации.
- 404 Not Found: Сервер не может найти запрашиваемый ресурс.
- 429 Too Many Requests: Клиент отправил слишком много запросов за короткое время (Rate Limiting).
5xx: Ошибка сервера (Server Error)
- 500 Internal Server Error: Общая ошибка сервера, когда более конкретная 5xx ошибка не подходит.
- 502 Bad Gateway: Сервер, выступая в роли шлюза или прокси, получил недопустимый ответ от вышестоящего сервера.
- 503 Service Unavailable: Сервер временно не может обработать запрос (перегрузка, техобслуживание).
Пример обработки в C# с использованием HttpClient:
using var httpClient = new HttpClient();
try
{
HttpResponseMessage response = await httpClient.GetAsync("https://api.example.com/data");
// Проверяем, является ли ответ успешным (коды 2xx)
if (response.IsSuccessStatusCode)
{
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Успех: {responseBody}");
}
else
{
// Обрабатываем ошибки клиента или сервера
Console.WriteLine($"Ошибка: {(int)response.StatusCode} {response.ReasonPhrase}");
if (response.StatusCode == HttpStatusCode.NotFound)
{
// Специфичная логика для 404
Console.WriteLine("Запрашиваемый ресурс не найден.");
}
}
}
catch (HttpRequestException ex)
{
Console.WriteLine($"Ошибка сетевого запроса: {ex.Message}");
}
Понимание этих кодов критично для отладки API, правильной обработки ошибок на клиенте и проектирования надежных распределенных систем.
Ответ 18+ 🔞
А, слушай, вот эта вся хуйня с HTTP-статусами — это ж, блядь, как азбука Морзе для веба, только цифрами! Сервер тебе такими трёхзначными числами намекает, что у него там в душе творится после твоего запроса. Разберём, что к чему, а то потом будешь как дурак в логах сидеть и чесать репу.
1xx: Информационные (Informational) Ну, типа, «я тут, не сплю». Сервер говорит: «Чувак, я тебя услышал, продолжай, если что».
- 100 Continue: Это когда ты такой: «Эй, сервак, я тебе щас огроменный JSON впендюрю, ты готов?». А он тебе: «Давай, хуле, шли уже, я пацан терпеливый». Используется с хедером
Expect: 100-continue, если ты не в курсе.
2xx: Успех (Success) Вот это красота! Всё прошло, как по маслу. Сервер доволен, ты доволен.
- 200 OK: Классика жанра. Запрос (GET, POST, PUT, DELETE) обработан, всё заебись. Данные — в теле ответа, забирай.
- 201 Created: Ты там что-то создал (типа POST-запрос отправил), и сервер тебе такой: «Молодец, пацан, ресурс создал. Вот его новый адресок, держи» (часто в заголовке
Location). - 204 No Content: Всё сделал, но тебе на руки нихуя не дам. Типичный ответ после успешного DELETE. «Удалил твою хуйню, иди нахуй».
3xx: Перенаправление (Redirection) А тут сервер начинает мудохаться: «Ищи то, не знаю что, но уже в другом месте».
- 301 Moved Permanently: Ресурс переехал насовсем. Запомни новый адрес и больше не приставай со старым.
- 302 Found / 307 Temporary Redirect: Ресурс временно тусуется в другом месте. 307 — чуть поумнее, он метод запроса (POST, например) не меняет, а 302 может и подменить.
4xx: Ошибка клиента (Client Error) А вот это уже твои косяки, дружок. Ты накосячил в запросе.
- 400 Bad Request: Ты отправил какую-то дичь, которую сервер не смог разобрать. Кривой JSON, не те поля — в общем, ерунда какая-то.
- 401 Unauthorized: «Предъяви документы». Нужна авторизация, а ты её не предоставил. Логин-пароль, токен — давай сюда.
- 403 Forbidden: «Документы-то есть, но пройти нельзя». Авторизовался, а прав доступа к этой конкретной фигне у тебя нет. Сурово.
- 404 Not Found: Легендарная ошибка! «То, что ты ищешь, я нихуя не нашёл». Либо урл кривой, либо ресурс реально удалили.
- 429 Too Many Requests: «Охуел, что ли?». Слишком много запросов за короткое время отправил. Это rate limiting, чтобы ты сервер не положил.
5xx: Ошибка сервера (Server Error) А вот это уже не твоя вина, а сервера. Он сам обосрался.
- 500 Internal Server Error: Классика. «У меня внутри что-то пошло не так, но я тебе не скажу что именно. Иди нахуй». Общая ошибка, когда всё сломалось.
- 502 Bad Gateway: Сервер работает как прокси или шлюз и получил какую-то хуйню от другого сервера, вместо нормального ответа.
- 503 Service Unavailable: «Я перегружен/на техобслуживании/просто не хочу сейчас работать». Сервер временно не может обрабатывать запросы.
Пример, как с этим жить на C# (HttpClient): Смотри, чтобы не выглядеть как полный чайник, нужно эти статусы обрабатывать.
using var httpClient = new HttpClient();
try
{
HttpResponseMessage response = await httpClient.GetAsync("https://api.example.com/data");
// Проверяем, улыбается ли нам сервер (коды 2xx)
if (response.IsSuccessStatusCode)
{
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Успех: {responseBody}");
}
else
{
// А вот тут уже не смешно. Ловим ошибки.
Console.WriteLine($"Ошибка: {(int)response.StatusCode} {response.ReasonPhrase}");
if (response.StatusCode == HttpStatusCode.NotFound)
{
// Конкретная логика для 404
Console.WriteLine("Запрашиваемый ресурс не найден, ищи лучше.");
}
// А тут можно и на 429, и на 500 реакции прописать.
}
}
catch (HttpRequestException ex)
{
// Это если вообще соединиться не удалось, сеть сдохла и всё такое.
Console.WriteLine($"Ошибка сетевого запроса: {ex.Message}");
}
Короче, если не понимаешь эти коды — пиши пропало. Отладка API превратится в ад, клиент будет падать в самых неожиданных местах, а распределённые системы будут рассыпаться как карточный домик. Так что вникай, это основа основ, ёпта!