Расскажите о стандартных кодах ответа HTTP и их классификации.

Ответ

HTTP-статус коды — это стандартные ответы сервера на запрос клиента. Они делятся на 5 основных классов:

  • 1xx (Informational / Информационные): Запрос получен, процесс продолжается. Клиент должен ожидать окончательного ответа.

    • 100 Continue: Сервер получил заголовки запроса, и клиент может продолжать отправлять тело запроса.
    • 101 Switching Protocols: Сервер переключает протоколы по требованию клиента (например, на WebSocket).
  • 2xx (Success / Успех): Запрос был успешно получен, понят и принят.

    • 200 OK: Стандартный успешный ответ.
    • 201 Created: Запрос выполнен, и в результате был создан новый ресурс.
    • 202 Accepted: Запрос принят к обработке, но она еще не завершена (используется для асинхронных операций).
    • 204 No Content: Сервер успешно обработал запрос, но в ответе нет тела (например, при удалении).
  • 3xx (Redirection / Перенаправление): Для выполнения запроса требуются дальнейшие действия со стороны клиента.

    • 301 Moved Permanently: Ресурс окончательно перемещен на новый URL.
    • 302 Found: Временное перенаправление. Клиент должен использовать старый URL для будущих запросов.
    • 304 Not Modified: Ответ на условный GET-запрос. Ресурс не изменился, тело ответа не передается.
  • 4xx (Client Error / Ошибка клиента): Запрос содержит синтаксическую ошибку или не может быть выполнен.

    • 400 Bad Request: Сервер не может обработать запрос из-за ошибки на стороне клиента (неверный синтаксис, некорректные данные).
    • 401 Unauthorized: Для доступа к ресурсу требуется аутентификация.
    • 403 Forbidden: У клиента нет прав доступа к ресурсу, даже если он аутентифицирован.
    • 404 Not Found: Сервер не может найти запрашиваемый ресурс.
    • 429 Too Many Requests: Клиент отправил слишком много запросов за определенный промежуток времени.
  • 5xx (Server Error / Ошибка сервера): Сервер не смог выполнить корректно составленный запрос.

    • 500 Internal Server Error: Общая ошибка сервера, возникшая в непредвиденной ситуации.
    • 502 Bad Gateway: Сервер, выступая в роли шлюза, получил недействительный ответ от вышестоящего сервера.
    • 503 Service Unavailable: Сервер временно не может обрабатывать запросы (из-за перегрузки или технического обслуживания).
    • 504 Gateway Timeout: Сервер-шлюз не дождался ответа от вышестоящего сервера.

В Go для удобства работы с кодами в пакете net/http определены константы. Вместо if/else для проверки статуса часто удобнее использовать switch:

import "net/http"

// ... после выполнения запроса ...

switch resp.StatusCode {
case http.StatusOK: // 200
    // Успешная обработка
case http.StatusCreated: // 201
    // Ресурс успешно создан
case http.StatusBadRequest: // 400
    // Ошибка в запросе клиента
case http.StatusNotFound: // 404
    // Ресурс не найден
case http.StatusInternalServerError: // 500
    // Внутренняя ошибка сервера
default:
    // Обработка других кодов
}