Все коды состояния HTTP: что они значат, когда их отправлять и из какого RFC они взяты
Работает в вашем браузере. Ничего из того, что вы вводите, никуда не отправляется.Код состояния HTTP тремя цифрами сообщает, что произошло. 404 значит, что ресурса здесь никогда не было, 410 — что он был и исчез навсегда, а 301 переносит его насовсем. Здесь перечислен каждый код: когда его отправлять и какой RFC его определяет.
Эта страница переведена машинным способом с английского оригинала. Перевод ещё не проверен человеком, поэтому ориентируйтесь на английскую версию. Читать английский оригинал
Введите в поле поиска номер, название или то, что хотите сказать, например «rate limit».
Сузьте список Коды кнопками в разделе Показать: Частые, Все или один класс от 1xx до 5xx.
Выберите код, чтобы прочитать его значение, когда его использовать, кешируется ли он и какой RFC его определяет.
Выберите язык в поле «Отправить этот код на» и нажмите Копировать фрагмент, чтобы получить код, который его возвращает.
Этот справочник кодов состояния HTTP перечисляет все зарегистрированные коды от 100 до 511, а также незарегистрированные, которые возвращают nginx, Apache, Laravel и Cloudflare. Для каждого кода сказано, что он на самом деле означает, когда его отправлять, может ли кеш сохранить ответ без заголовков кеширования, меняет ли перенаправление метод запроса и какой RFC его определяет.
Поиск работает тремя способами. Введите номер вроде 404 или класс вроде 4xx, чтобы сразу перейти к нему. Введите название, например «not found». Или опишите, что хотите выразить, и поиск по намерению найдёт код: «login failed» даёт 401, «rate limit» — 429, «file too large» — 413, «validation failed» — 422.
Здесь учтены две детали, в которых ошибается большинство списков. Кеширование — это не просто «да» или «нет»: раздел 15.1 RFC 9110 называет двенадцать кодов, которые кеш может сохранить вообще без явных заголовков, поэтому случайный 404 может «прилипнуть». И перенаправления различаются: 301 и 302 позволяют клиенту превратить POST в GET, 303 делает это всегда, а 307 и 308 обязаны в точности повторить метод и тело.
Для каждого частого кода есть копируемый фрагмент для «сырого» HTTP, Express, Fastify, FastAPI, Go и PHP, включая заголовок, который этот код требует, например WWW-Authenticate для 401 или Allow для 405. Ничего никуда не отправляется; вся таблица находится на странице.
Используйте 401 Unauthorized. Он значит, что сервер не знает, кто вы, поэтому отсутствующие, истёкшие или неверные учётные данные относятся сюда. 403 Forbidden используйте, только когда вы знаете, кто обращается, и всё равно отказываете. Спецификация требует заголовок WWW-Authenticate в каждом 401.
401 означает «не аутентифицирован»: отправьте учётные данные и повторите. 403 означает «аутентифицирован, но нет прав»: лучшие учётные данные не помогут. Если само раскрытие факта существования записи — утечка, некоторые API отвечают 404 вместо 403, чтобы злоумышленник ничего не узнал.
Раздел 15.1 RFC 9110 называет 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414 и 501 эвристически кешируемыми, а RFC 7725 добавляет 451. Кеш может сохранять их без заголовков Cache-Control и Expires, поэтому временный 404 может сохраняться. Все остальные коды требуют явных заголовков кеширования.
Спецификация этого не разрешает, но почти каждый браузер делает именно так для 301 и 302. Код 303 всегда превращает следующий запрос в GET. Если метод и тело должны пережить перенаправление, используйте 307 для временного переноса или 308 для постоянного.
418 I'm a Teapot взят из RFC 2324 — первоапрельской шутки 1998 года о протоколе для кофеварки. Предложение 2017 года переиспользовать этот номер отозвали после возражений, так что он остаётся зарезервированным в реестре IANA и никогда не должен получать настоящего значения.
Нет. 499 — код nginx, который виден только в логах, для клиента, разорвавшего соединение, а 520–527 — коды Cloudflare для проблем между граничными серверами и вашим исходным сервером. Ни один из них не зарегистрирован в IANA. Они перечислены здесь, потому что вы встретите их в логах, и у каждого указан продукт, который его придумал.
Всё ещё не получается? Задайте вопрос об инструменте «Коды состояния HTTP» и ответить может любой, кто знает. Учётная запись не нужна.