Ответ
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:
// Обработка других кодов
}