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