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