Ответ
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:
// Обработка других кодов
} Ответ 18+ 🔞
О, это ж про наши любимые HTTP-статусы, блядь! Ну, слушай, сейчас разложу по полочкам, как бабушка на базаре. Это, типа, такие цифры, которые сервер тебе в ответ плюёт, когда ты к нему стучишься. Типа "понял — не понял", "иди нахуй" или "сам дурак". Всего их, этих циферок, пять семейств, как в мафии, только сисадминской.
Первая сотня (1хх) — Информационные.
Это когда сервер такой: "Ну, я твой запрос услышал, чувак, не переживай, обрабатываю. Но ты пока не расслабляйся, жди окончательного вердикта".
100 Continue— "Давай, вали дальше тело запроса, я заголовки проглотил, жду продолжения банкета".101 Switching Protocols— "Ага, щас переключимся на другой протокол, типа WebSocket. Готовься, сука!"
Вторая сотня (2хх) — Успех.
Тут всё пиздато, запрос прошёл как по маслу.
200 OK— классика, "всё заебись, держи ответ".201 Created— "Чувак, я по твоей просьбе тут новую хуйню создал, наслаждайся".202 Accepted— "Ладно, принял твою заявку в работу, но не дёргай меня, сделаю — отпишусь".204 No Content— "Всё сделал, но тебе на ответе нихуя не пришлю, типа удалил и всё, иди гуляй".
Третья сотня (3хх) — Перенаправления.
Тут сервер начинает мудохать тебя по разным углам.
301 Moved Permanently— "Ресурс, блядь, переехал насовсем, новый адрес в заголовках, запоминай".302 Found— "А он сейчас временно тут, но ты всё равно потом стучи на старый адрес, я тебя перенаправлю".304 Not Modified— "Ты же просил только если изменилось? Не изменилось, сука! Качай из кеша и не грузи меня".
Четвёртая сотня (4хх) — Ошибки клиента.
А вот это уже твои косяки, дружок. Сервер в ярости.
400 Bad Request— "Ты мне какую-то хуйню прислал, я даже разобрать не могу. Иди проверь, что ты там накодил".401 Unauthorized— "А ты кто такой? Предъяви пропуск, падла!"403 Forbidden— "Пропуск есть, но в этот кабинет тебе нельзя. Иди нахуй".404 Not Found— "Бля, ну нет тут того, что ты ищешь! Может, сам потерял?"429 Too Many Requests— "Охуел, что ли? Слишком много запросов за раз! Успокойся, подожди".
Пятая сотня (5хх) — Ошибки сервера.
А вот это уже пиздец на нашей стороне. Мы обосрались, но виноваты вы.
500 Internal Server Error— "Короче, у нас тут всё упало, но мы не знаем почему. Сорян".502 Bad Gateway— "Я как шлюз запросил у другого сервака ответ, а он мне какую-то дичь прислал. Пиздец".503 Service Unavailable— "Сервер лег, блядь. То ли грузят, то ли ремонтируют. Заходи позже".504 Gateway Timeout— "Я ждал-ждал ответа от другого сервака, да так и не дождался. Заебал".
В Go, чтобы не запоминать эти циферки, в пакете net/http для них константы завели. И вместо этих бесконечных if resp.StatusCode == 200, можно 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:
// Обработка других кодов
}
Вот и вся магия, блядь. Главное — помни: 2хх — хорошо, 4хх — ты обосрался, 5хх — обосрались мы. А 3хх — это как "ищи, сука, дальше".