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

Что такое код ошибки HTTP?

1.8 Middle🔥 201 комментариев
#REST API и HTTP

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

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

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

Что такое код ошибки HTTP

HTTP код ошибки (HTTP Status Code) — это трёхзначный код, который сервер возвращает в ответ на запрос клиента. Код указывает результат обработки запроса: успешно ли выполнено, произошла ли ошибка, нужно ли выполнить какое-то действие.

Категории кодов

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

  • 100 Continue — продолжить отправку тела запроса

2xx — Успех

  • 200 OK — запрос успешно выполнен
  • 201 Created — ресурс создан
  • 204 No Content — успех, но нет контента для возврата

3xx — Перенаправление

  • 301 Moved Permanently — постоянный редирект
  • 302 Found — временный редирект
  • 304 Not Modified — ресурс не изменился

4xx — Ошибка клиента

  • 400 Bad Request — некорректный запрос
  • 401 Unauthorized — требуется авторизация
  • 403 Forbidden — доступ запрещён
  • 404 Not Found — ресурс не найден
  • 429 Too Many Requests — слишком много запросов

5xx — Ошибка сервера

  • 500 Internal Server Error — внутренняя ошибка сервера
  • 502 Bad Gateway — ошибка шлюза
  • 503 Service Unavailable — сервис недоступен
  • 504 Gateway Timeout — timeout

Наиболее частые коды

200 OK — успешный запрос:

import requests

response = requests.get('https://api.example.com/users')
print(response.status_code)  # 200
print(response.json())  # Данные пользователей

201 Created — ресурс создан:

response = requests.post('https://api.example.com/users', 
    json={'name': 'Alice', 'email': 'alice@example.com'})
print(response.status_code)  # 201
print(response.json())  # Новый пользователь с ID

400 Bad Request — некорректный запрос:

response = requests.post('https://api.example.com/users',
    json={'invalid_field': 'value'})
print(response.status_code)  # 400
print(response.json())  # {'error': 'Missing required fields'}

401 Unauthorized — требуется авторизация:

response = requests.get('https://api.example.com/protected')
print(response.status_code)  # 401
print(response.json())  # {'error': 'Unauthorized'}

403 Forbidden — доступ запрещён:

# У пользователя есть авторизация, но нет прав
response = requests.get('https://api.example.com/admin')
print(response.status_code)  # 403

404 Not Found — ресурс не найден:

response = requests.get('https://api.example.com/users/999')
print(response.status_code)  # 404
print(response.json())  # {'error': 'User not found'}

500 Internal Server Error — внутренняя ошибка сервера:

response = requests.get('https://api.example.com/users')
print(response.status_code)  # 500
# Сервер сломался, возвращает ошибку

Обработка ошибок в коде

import requests

def fetch_user(user_id):
    response = requests.get(f'https://api.example.com/users/{user_id}')
    
    if response.status_code == 200:
        return response.json()
    elif response.status_code == 404:
        print(f'Пользователь {user_id} не найден')
        return None
    elif response.status_code == 401:
        print('Требуется авторизация')
        return None
    elif response.status_code >= 500:
        print('Ошибка сервера')
        return None
    else:
        print(f'Ошибка: {response.status_code}')
        return None

user = fetch_user(123)

Правильная обработка с try/except

import requests
from requests.exceptions import RequestException

def fetch_data(url):
    try:
        response = requests.get(url, timeout=5)
        response.raise_for_status()  # Выкинет ошибку для 4xx и 5xx
        return response.json()
    except requests.exceptions.HTTPError as e:
        print(f'HTTP ошибка: {e.response.status_code}')
    except requests.exceptions.Timeout:
        print('Timeout')
    except requests.exceptions.RequestException as e:
        print(f'Ошибка запроса: {e}')
    return None

REST API Best Practices

Правильные коды для разных операций:

from fastapi import FastAPI, HTTPException

app = FastAPI()

# GET — получить данные
@app.get('/users/{user_id}')
def get_user(user_id: int):
    if user_id not in users:
        raise HTTPException(status_code=404, detail='User not found')
    return users[user_id]

# POST — создать данные
@app.post('/users')
def create_user(user: UserData):
    if not user.email:
        raise HTTPException(status_code=400, detail='Email required')
    user_id = len(users) + 1
    users[user_id] = user
    return {'id': user_id, 'status_code': 201}  # 201 Created

# PUT — обновить данные
@app.put('/users/{user_id}')
def update_user(user_id: int, user: UserData):
    if user_id not in users:
        raise HTTPException(status_code=404, detail='User not found')
    users[user_id] = user
    return {'status_code': 200}

# DELETE — удалить данные
@app.delete('/users/{user_id}')
def delete_user(user_id: int):
    if user_id not in users:
        raise HTTPException(status_code=404, detail='User not found')
    del users[user_id]
    return {'status_code': 204}  # 204 No Content

Проверка кодов в тестах

import requests
from unittest.mock import patch, MagicMock

def test_fetch_user():
    with patch('requests.get') as mock_get:
        mock_response = MagicMock()
        mock_response.status_code = 200
        mock_response.json.return_value = {'id': 1, 'name': 'Alice'}
        mock_get.return_value = mock_response
        
        result = fetch_user(1)
        assert result['name'] == 'Alice'

def test_user_not_found():
    with patch('requests.get') as mock_get:
        mock_response = MagicMock()
        mock_response.status_code = 404
        mock_get.return_value = mock_response
        
        result = fetch_user(999)
        assert result is None

HTTP коды ошибок — стандартный способ коммуникации между клиентом и сервером.

Что такое код ошибки HTTP? | PrepBro