← Назад к вопросам

Что означают статус-коды?

2.0 Middle🔥 141 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

HTTP Статус-коды: Полное объяснение

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

Классификация по группам

1xx — Информационные коды (100-199)

Это промежуточные ответы, сигнализирующие о продолжении обработки:

  • 100 Continue — сервер готов получить тело запроса
  • 101 Switching Protocols — переключение на другой протокол (например, WebSocket)

2xx — Успешные ответы (200-299)

Запрос обработан успешно:

  • 200 OK — стандартный успешный ответ; данные возвращены
  • 201 Created — ресурс успешно создан (часто с POST)
  • 202 Accepted — запрос принят, но обработка ещё не завершена
  • 204 No Content — успех, но тело ответа отсутствует

3xx — Перенаправления (300-399)

Требуется дополнительное действие для завершения запроса:

  • 301 Moved Permanently — ресурс перемещён навсегда
  • 302 Found — временное перенаправление
  • 304 Not Modified — кэшированная версия актуальна
  • 307 Temporary Redirect — как 302, но метод HTTP не меняется

4xx — Ошибки клиента (400-499)

Клиент отправил некорректный запрос:

  • 400 Bad Request — синтаксическая ошибка в запросе
  • 401 Unauthorized — требуется аутентификация
  • 403 Forbidden — у пользователя нет прав доступа
  • 404 Not Found — ресурс не найден
  • 405 Method Not Allowed — метод не поддерживается для этого ресурса
  • 409 Conflict — конфликт с текущим состоянием (например, дублирование)
  • 422 Unprocessable Entity — данные валидны синтаксически, но семантически неправильны
  • 429 Too Many Requests — слишком много запросов (rate limiting)

5xx — Ошибки сервера (500-599)

Сервер не может обработать запрос:

  • 500 Internal Server Error — неожиданная ошибка
  • 501 Not Implemented — функция не реализована
  • 502 Bad Gateway — ошибка шлюза (proxy)
  • 503 Service Unavailable — сервис временно недоступен
  • 504 Gateway Timeout — истекло время ожидания

Примеры в коде

import requests
from flask import Flask, jsonify, request

app = Flask(__name__)

# Пример с requests
response = requests.get("https://api.example.com/users/1")
if response.status_code == 200:
    data = response.json()
elif response.status_code == 404:
    print("Пользователь не найден")
elif response.status_code == 500:
    print("Ошибка сервера")

# Пример с Flask
@app.route("/users", methods=["POST"])
def create_user():
    data = request.json
    if not data.get("name"):
        return jsonify({"error": "Name is required"}), 400  # Bad Request
    
    user = {"id": 1, "name": data["name"]}
    return jsonify(user), 201  # Created

@app.route("/users/<id>", methods=["GET"])
def get_user(id):
    user = find_user(id)
    if not user:
        return jsonify({"error": "User not found"}), 404  # Not Found
    return jsonify(user), 200  # OK

Лучшие практики

  1. Используй правильные коды — выбирай наиболее точный код для ситуации
  2. 2xx для успеха, 4xx для ошибок клиента, 5xx для ошибок сервера — не путай логику
  3. Логируй ошибки 5xx — всегда отслеживай серверные ошибки
  4. Обрабатывай переадресации — respects 3xx коды в библиотеках (requests делает это автоматически)
  5. Возвращай информативные сообщения об ошибках — в теле ответа объясни, что произошло

Знание статус-кодов критично для написания надёжного и понятного API, а также для отладки проблем с сетевым взаимодействием.