Код и данные · HTTPКоды состояния HTTP

Что значит код ответа, кто виноват — клиент или сервер — и что с этим делать. Поиск по номеру, названию и смыслу; шестьдесят четыре кода с практикой, а не только с определением.

Справочник работает целиком в браузере — ничего не отправляется
01Справочник02Частые пары03О кодах04Вопросы05Похожие
01

Справочник кодов

поиск по номеру, названию и смыслу — «404», «not found», «слишком много запросов»
Классы
Найдено кодов: 64
Карточка кода
404
Не найденоNot Found
Ошибка клиента4xx Ошибка клиента

Ресурса по указанному адресу нет. Самый узнаваемый код: страница удалена, адрес набран с опечаткой или ссылка устарела.

Частые причины
  • Опечатка в адресе или устаревшая ссылка
  • Страница удалена или переименована без редиректа
  • Ошибка в маршрутизации приложения
Что делать
  • Проверить адрес по символам: лишний слэш и регистр имеют значение
  • Для удалённого навсегда ресурса отвечать 410 — это честнее и понятнее поисковику
Не путать · смежные
Ссылка на код: bringer.ru/tools/http-status?code=404
02

Частые пары: что с чем путают

301 · 302 · 308

Редиректы
Перемещено навсегда

Навсегда. Передаёт вес страницы — ссылки стоит обновить.

Найдено (временно)

Временно. Вес не передаёт, ссылки остаются прежними.

Постоянный редирект

Навсегда и с сохранением метода: POST останется POST.

301 переносит вес страницы на новый адрес и кэшируется надолго; 302 говорит «пока здесь», ссылки переносить не нужно; 308 — тот же 301, но сохраняет метод запроса, поэтому подходит для API.

401 · 403

Доступ
Не авторизован

Сервер не знает, кто вы: токена нет или он истёк.

Доступ запрещён

Сервер знает вас, но прав на действие нет.

401 — сервер не знает, кто вы: нужен вход или свежий токен. 403 — знает, но не даёт: дело в правах, и повторный вход ничего не изменит.

200 · 204

Успех
Успешно

Успех, тело в ответе есть — его и читают.

Нет содержимого

Успех без тела: проверять только код ответа.

200 отдаёт тело ответа, 204 — успех без тела. Клиент, который ждёт JSON от 204, падает на разборе пустой строки.

400 · 422

Данные
Некорректный запрос

Сломан сам запрос: синтаксис, формат, пропущенный параметр.

Данные не проходят проверку

Запрос понят, но значения не проходят проверку.

400 — сломан сам запрос: синтаксис, формат, отсутствующий параметр. 422 — запрос понят, но данные не проходят проверку: почта без собаки, отрицательное количество.

502 · 504

Шлюз
Плохой шлюз

Апстрим ответил чем-то невнятным — чаще всего он упал.

Шлюз не дождался ответа

Апстрим не ответил вовремя — он жив, но слишком медленный.

502 — вышестоящий сервер ответил чем-то невнятным или не ответил вовсе; 504 — ответ не пришёл за отведённое время. Первое чаще про упавшее приложение, второе — про медленное.

03

О кодах HTTP

1xx — информационные

Промежуточные
100 · 101 · 103
Сервер принял запрос и продолжает обработку. В обычной работе такие ответы видны редко: их отдают при смене протокола на WebSocket или при ранних подсказках браузеру.

2xx — успех

Всё хорошо
200 · 201 · 204
Запрос обработан. 200 — с телом ответа, 201 — создан ресурс и его адрес лежит в `Location`, 204 — успех без тела: обычный ответ на удаление, когда возвращать нечего.

3xx — перенаправление

Редирект
301 · 302 · 304
Ресурс переехал или не изменился. Различать постоянный переезд (301, 308) и временный (302, 307) важно: первый переносит вес страницы в поиске и надолго кэшируется.

4xx — ошибка клиента

Виноват запрос
400 · 401 · 404 · 429
Проблема в самом запросе: неверный адрес, нет прав, превышен лимит. Чинится на стороне того, кто запрос отправил, — сервер при этом работает нормально.

5xx — ошибка сервера

Виноват сервер
500 · 502 · 503
Сервер не смог обработать корректный запрос. На клиенте не исправить: нужно смотреть логи. Если сайт чужой — остаётся повторить позже.

Кто виноват

Быстрое правило
4xx / 5xx
Первая цифра сразу говорит, где искать: 4xx — в своём запросе, 5xx — на сервере. Это первое, что стоит понять, увидев код, — остальное детали.
04

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

Ресурса по указанному адресу нет: страница удалена, переименована без редиректа или адрес набран с опечаткой. Это ошибка класса 4xx, то есть проблема в самом запросе, а не на сервере — сервер работает и честно отвечает «такого у меня нет». Если страница удалена навсегда и возвращаться нечему, правильнее отвечать кодом 410: он говорит то же самое, но определённее.

Обновлено

«» добавлен в избранное