Коды состояния HTTP

Коды, которые чаще всего встречаются у API и CDN. Редкие экспериментальные не включены.

Обновлено:

КодИмяЗначение
200OKУспех с телом ответа
201СозданоРесурс создан
204Нет содержимогоУспех, пустое тело
301Перемещено навсегдаПостоянное перенаправление
302НайденоВременное перенаправление
304Не измененоИспользовать кэш
400Некорректный запросНекорректный запрос клиента
401Не авторизованоТребуется аутентификация / не пройдена
403ЗапрещеноАутентифицирован, но отказано
404Не найденоРесурс не существует
405Метод не разрешёнНеверный HTTP-метод
408Истекло время ожиданияКлиент слишком медленный
409КонфликтКонфликт состояния
410ИсчезУдалено навсегда
422Необрабатываемый объектНекорректная семантика
429Слишком много запросовОграничение частоты
500Внутренняя ошибка сервераСбой сервера
502Неверный шлюзНекорректный ответ вышестоящего сервера
503Сервис недоступенПерегружен или недоступен
504Таймаут шлюзаТаймаут вышестоящего сервера

Примечания

Пять классов кодов состояния

Первая цифра указывает, кто несёт ответственность и что примерно произошло. 1xx — информационные, клиенты их редко видят. 2xx означают успех: 200 OK с телом, 204 No Content без тела, 206 для частичной загрузки. 3xx означают, что ресурс находится в другом месте. 4xx указывают на ошибку самого запроса: некорректный синтаксис, отсутствие учётных данных или ограничение частоты запросов. 5xx говорят о сбое сервера, хотя запрос был корректным. Уже по первой цифре можно понять, нужно ли исправлять клиентскую часть или разбираться с сервером.

Как выбрать правильный редирект

301 и 308 оба означают постоянный перенос; 302 и 307 — временный. Разница в обработке метода: 301 и 302 исторически позволяют клиентам превращать POST в GET, тогда как 307 и 308 сохраняют исходный метод и тело, что важно для API и отправки форм. Используйте 301 для URL, который переместился навсегда, а 302 или 307 — для временного маршрутизирования, например страниц обслуживания или A/B-тестов. Остерегайтесь цепочек: каждый лишний переход увеличивает задержку и снижает вес ссылки, поэтому направляйте сразу на конечный адрес.

Разбираемся с ошибками 4xx

401 означает отсутствие или сбой аутентификации, поэтому отправка верных учётных данных может решить проблему; 403 означает, что запрос понят и аутентифицирован, но не разрешён, и повтор с теми же данными не поможет. 404 — ресурс не существует; 410 сигнализирует, что ресурс существовал и был намеренно удалён. 429 — вы уперлись в ограничение частоты, нужно снизить интенсивность, соблюдая заголовок Retry-After. 400 обычно означает некорректный ввод, 405 — неправильный метод для этого URL, а 422 — синтаксис корректен, но содержимое не прошло валидацию.

Читаем коды 5xx

500 — общая внутренняя ошибка; 502 Bad Gateway означает, что вышестоящий сервер возвратил неработоспособный ответ; 503 — сервис временно недоступен или перегружен; 504 — у вышестоящего сервера истёк таймаут. Это проблемы сервера, не звонящего, поэтому решение — повтор с экспоненциальной задержкой, проверка состояния вышестоящего звена или сброс нагрузки. CDN может эмитировать 502, 503 или 504 от имени origin, до которого не может достучаться, поэтому один и тот же код может приходить из двух совершенно разных мест — смотрите заголовки server и cache-status, чтобы понять источник.

Коды состояния на практике: API и кеширование

Два повседневных применения заслуживают внимания. Первое — кеширование: 200 с заголовком Cache-Control можно сохранять, 304 Not Modified сообщает клиенту использовать его копию, а 5xx не следует кешировать. Второе — API: POST, создающий ресурс, должен возвращать 201 с заголовком Location; DELETE часто возвращает 204; PATCH, не изменивший ничего, может вернуть 200 или 204. Корректные клиенты сначала разветвляют логику по классу (2xx, 4xx, 5xx), а затем по точному коду, что делает логику повторов и backoff простой и предсказуемой.

Частые вопросы

Что означает код HTTP 403?
403 Forbidden означает, что сервер понял и прошёл аутентификацию запроса, но отказывает в доступе к ресурсу. В отличие от 401, повторный вход не поможет.
В чём разница между редиректами HTTP 301 и 302?
301 — постоянное перемещение: клиенты и поисковики должны использовать новый URL. 302 — временный редирект, старый адрес остаётся действительным.
Что означает HTTP 429 и как это исправить?
429 означает, что достигнут лимит запросов. Снизьте частоту запросов и учитывайте заголовок Retry-After, если сервер его присылает.

Источники