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