Справочник HTTP-кодов ответа
Любой HTTP-ответ начинается с трехзначного кода ответа (его еще называют кодом состояния), который сообщает клиенту, чем закончился запрос. Коды сгруппированы по классам: для каждого — объяснение простым языком, пример ответа и то, что он значит для редиректов и SEO.
1xx Информационные
Запрос получен, обработка продолжается. Такие промежуточные ответы приходят до окончательного и никогда не завершают цепочку редиректов.
- 100
Continue
Промежуточный ответ: сервер принял заголовки запроса, и клиент, отправивший «Expect: 100-continue», теперь должен передать тело запроса. - 101
Switching Protocols
Сервер принимает запрос клиента на Upgrade и переключает соединение на другой протокол — на практике почти всегда на WebSocket. - 102
Processing
Устаревший промежуточный ответ WebDAV: сервер все еще обрабатывает долгий запрос, и клиенту нужно продолжать ждать окончательного ответа. - 103
Early Hints
Промежуточный ответ с заголовками Link до окончательного ответа: браузер заранее загружает ресурсы или открывает соединения, пока сервер еще работает.
2xx Успешные
Запрос получен, понят и принят. Исправная цепочка редиректов заканчивается одним из этих кодов, обычно 200 OK.
- 200
OK
Запрос выполнен успешно; для GET тело ответа содержит запрошенный ресурс. Любая цепочка редиректов должна заканчиваться на URL, который отдает 200. - 201
Created
Запрос выполнен, и создан новый ресурс — обычно после POST или PUT. Заголовок Location, если он есть, указывает на новый ресурс. - 202
Accepted
Запрос принят в обработку, но еще не выполнен. Используется для асинхронных задач; окончательный результат не гарантирован. - 203
Non-Authoritative Information
Запрос выполнен, но преобразующий прокси изменил ответ, поэтому содержимое не совпадает в точности с тем, что отправил исходный сервер. - 204
No Content
Запрос выполнен, а отправлять в ответ нечего. Браузер остается на текущей странице; типично для DELETE, маячков и предварительных запросов CORS. - 205
Reset Content
Запрос выполнен, и клиенту нужно сбросить представление документа — например, очистить форму, которую пользователь только что отправил. - 206
Partial Content
Сервер отправляет только те диапазоны байтов, которые клиент запросил в заголовке Range, — так работают потоковое видео и докачка файлов. - 207
Multi-Status
Ответ WebDAV, который в XML-теле multistatus передает отдельный код ответа для каждого из нескольких ресурсов или свойств. - 208
Already Reported
Используется внутри ответа WebDAV 207: элементы этой коллекции уже были перечислены, что исключает бесконечные повторы при зацикленных привязках. - 226
IM Used
Сервер ответил на GET с дельта-кодированием (RFC 3229): тело содержит только изменения относительно версии, которая уже есть у клиента.
3xx Редиректы
Клиенту нужно выполнить дополнительное действие — как правило, запросить URL из заголовка Location. Именно из этих кодов и состоит цепочка редиректов.
- 300
Multiple Choices
У ресурса несколько представлений, и клиент может выбрать одно из них. Браузеры не переходят по 300 автоматически, даже если есть заголовок Location. - 301
Moved Permanently
Постоянный 301 редирект: у ресурса новый URL, указанный в заголовке Location. Клиенты и поисковые системы должны с этого момента использовать новый URL. - 302
Found
Временный 302 редирект: ресурс временно находится по другому URL. Клиенты переходят по заголовку Location, но в дальнейшем должны использовать исходный URL. - 303
See Other
Отправляет клиента на другой URL, который нужно запросить методом GET, — обычно на страницу с результатом после отправки формы (Post/Redirect/Get). - 304
Not Modified
Ответ на условный GET или HEAD: копия в кэше клиента еще актуальна, поэтому сервер не отправляет тело, а клиент повторно использует сохраненную копию. - 305
Use Proxy
Устаревший код. Предписывал клиенту повторить запрос через прокси, указанный в Location; браузеры игнорируют его из соображений безопасности. - 306
Не используется (ранее Switch Proxy)
Зарезервирован и не используется. Код 306 предлагали как «Switch Proxy», но отказались от идеи; применять его нельзя, клиенты считают его неизвестным кодом 3xx. - 307
Temporary Redirect
Временный редирект: запрос нужно повторить по URL из Location с тем же методом и телом. В отличие от 302, POST не превращается в GET. - 308
Permanent Redirect
Постоянный редирект с сохранением метода и тела запроса. Как и при 301, дальше нужно использовать новый URL, но POST никогда не превращается в GET.
4xx Ошибки клиента
Запрос в таком виде выполнить нельзя: страницы не существует, доступ запрещен или клиент отправил слишком много запросов.
- 400
Bad Request
Ошибка 400: сервер не станет обрабатывать запрос из-за ошибки клиента — неправильного синтаксиса, недопустимого URL или слишком больших cookie. - 401
Unauthorized
Ошибка 401: нужна действительная аутентификация. Сервер должен отправить заголовок WWW-Authenticate со способом аутентификации, например Basic или Bearer. - 402
Payment Required
Зарезервирован в HTTP для будущего использования. На практике некоторые API и сервисы отдают его, когда требуется оплата, кредиты или подписка. - 403
Forbidden
Ошибка 403: сервер понял запрос, но отказывается его авторизовать. В отличие от 401, повторная отправка тех же учетных данных не поможет. - 404
Not Found
Ошибка 404: по этому URL на сервере ничего нет, или сервер не сообщает, существует ли ресурс. Временное это отсутствие или постоянное, код не говорит. - 405
Method Not Allowed
URL существует, но не поддерживает использованный HTTP-метод, например POST к статической странице. Заголовок Allow перечисляет допустимые методы. - 406
Not Acceptable
Сервер не может сформировать ответ под заголовки Accept клиента (формат, язык, кодирование) и не хочет отдавать вариант по умолчанию. - 407
Proxy Authentication Required
Как 401, но аутентификации требует прокси между клиентом и сервером. Заголовок Proxy-Authenticate сообщает, как ее пройти. - 408
Request Timeout
Сервер не получил полный запрос вовремя и закрывает соединение. Клиент может отправить запрос повторно по новому соединению. - 409
Conflict
Запрос конфликтует с текущим состоянием ресурса: например, конфликт правок, дублирующаяся запись или несовпадение версий. - 410
Gone
Ресурс удален намеренно, и возвращать его не планируют. Это более явный и окончательный сигнал, чем ошибка 404 Not Found. - 411
Length Required
Сервер отклоняет запрос с телом, но без заголовка Content-Length. Клиент может отправить его повторно с корректным Content-Length. - 412
Precondition Failed
Условие в заголовках запроса, например If-Match или If-Unmodified-Since, оказалось ложным, поэтому сервер не применил изменение. - 413
Content Too Large
Тело запроса больше, чем принимает сервер, — например, при загрузке огромного файла. Прежние названия: «Payload Too Large» и «Request Entity Too Large». - 414
URI Too Long
Запрошенный URL длиннее, чем готов обработать сервер, — например, потому что циклический редирект раз за разом дописывает к нему параметры. - 415
Unsupported Media Type
Сервер отклоняет тело запроса, потому что его формат (Content-Type) или кодирование содержимого (Content-Encoding) не поддерживается. - 416
Range Not Satisfiable
Диапазон байтов из заголовка Range выходит за пределы файла — например, когда загрузка возобновляется после конца изменившегося файла. - 417
Expectation Failed
Сервер не может выполнить ожидание из заголовка Expect. На практике это значит, что Expect: 100-continue не поддерживается. - 418
I'm a Teapot
Первоапрельская шутка 1998 года из протокола управления кофейниками (RFC 2324). В HTTP зарезервирован как неиспользуемый, но некоторые сайты отдают его нарочно. - 421
Misdirected Request
Запрос попал на сервер, который не может отвечать за это имя хоста, — часто из-за несовпадения TLS SNI или повторно использованного соединения HTTP/2. - 422
Unprocessable Content
Запрос составлен правильно, но его содержимое некорректно по смыслу — обычно это ошибка валидации в API. Прежнее название — «Unprocessable Entity». - 423
Locked
WebDAV: ресурс заблокирован, поэтому метод сейчас применить нельзя. Клиенту нужен токен блокировки, иначе придется ждать ее снятия. - 424
Failed Dependency
WebDAV: метод не выполнен, потому что не удалось другое действие, от которого он зависел, — например, изменение одного свойства в PROPPATCH. - 425
Too Early
Сервер не обрабатывает запрос из ранних данных TLS (0-RTT), так как его можно воспроизвести повторно. Клиент повторяет запрос после рукопожатия. - 426
Upgrade Required
Сервер отказывается обрабатывать запрос по текущему протоколу и требует перейти на протокол, указанный в заголовке Upgrade. - 428
Precondition Required
Сервер требует, чтобы запрос был условным (If-Match): так не теряются обновления, когда несколько клиентов редактируют один ресурс. - 429
Too Many Requests
Клиент отправил слишком много запросов за определенное время (ограничение частоты запросов). Заголовок Retry-After может указать, сколько ждать. - 431
Request Header Fields Too Large
Сервер отклоняет запрос из-за слишком больших заголовков — обычно потому, что браузер отправляет слишком много cookie или слишком большие cookie. - 444
No Response
nginx Нестандартный код nginx: сервер закрывает соединение, не отправив никакого ответа. Клиент видит пустой ответ и никогда не получает 444. - 451
Unavailable For Legal Reasons
Доступ закрыт по юридическому требованию — решению суда или блокировке властей. Номер отсылает к роману Рэя Брэдбери «451 градус по Фаренгейту». - 499
Client Closed Request
nginx Нестандартный код, который nginx записывает в журнал доступа, когда клиент закрыл соединение раньше, чем сервер отправил ответ.
5xx Ошибки сервера
Сервер не смог выполнить запрос, который выглядит корректным. Постоянные ошибки 5xx закрывают сайт и для посетителей, и для поисковых роботов.
- 500
Internal Server Error
Ошибка 500 — общий сбой на стороне сервера: что-то пошло не так, например упало приложение или сломан файл конфигурации. - 501
Not Implemented
Сервер не поддерживает функциональность, необходимую для выполнения запроса, — как правило, HTTP-метод, который он не распознает. - 502
Bad Gateway
Ошибка 502: шлюз или прокси получил недопустимый ответ от вышестоящего сервера — например, потому что упало приложение за nginx. - 503
Service Unavailable
Ошибка 503: сервер временно не может обработать запрос из-за перегрузки или технических работ. Заголовок Retry-After подскажет, когда повторить попытку. - 504
Gateway Timeout
Ошибка 504: шлюз или прокси не дождался ответа от вышестоящего сервера — обычно потому, что приложение работает слишком медленно. - 505
HTTP Version Not Supported
Сервер не поддерживает основную версию HTTP из запроса или отказывается ее поддерживать. Сегодня это часто указывает на некорректную строку запроса. - 506
Variant Also Negotiates
Ошибка конфигурации сервера при прозрачном согласовании содержимого (RFC 2295): выбранный вариант сам подлежит согласованию, и возникает цикл. - 507
Insufficient Storage
WebDAV: сервер не может сохранить данные, нужные для выполнения запроса, — например, потому что заполнен диск или исчерпана квота пользователя. - 508
Loop Detected
WebDAV: сервер прервал операцию с Depth: infinity, обнаружив бесконечный цикл привязок. К циклическим редиректам отношения не имеет. - 510
Not Extended
Из устаревшего HTTP Extension Framework (RFC 2774): в запросе нет объявления обязательного расширения. Исторический код, на деле не используется. - 511
Network Authentication Required
Сеть, обычно Wi-Fi с порталом авторизации, требует войти, прежде чем дать доступ. Код отправляет перехватывающая сеть, а не исходный сервер. - 520
Web Server Returned an Unknown Error
Cloudflare Код Cloudflare: исходный сервер вернул пустой, неизвестный или неожиданный ответ — например, после падения или сброса соединения. - 521
Web Server Is Down
Cloudflare Код Cloudflare: исходный сервер отклонил соединение от Cloudflare — обычно потому, что веб-сервер не работает или блокирует Cloudflare. - 522
Connection Timed Out
Cloudflare Код Cloudflare: Cloudflare не смог вовремя установить TCP-соединение с исходным сервером, или тот не подтвердил получение запроса. - 523
Origin Is Unreachable
Cloudflare Код Cloudflare: Cloudflare вообще не может связаться с исходным сервером — как правило, из-за проблем маршрутизации или неверного IP-адреса в DNS. - 524
A Timeout Occurred
Cloudflare Код Cloudflare: Cloudflare подключился к исходному серверу, но не получил HTTP-ответ до истечения тайм-аута чтения (по умолчанию около двух минут). - 525
SSL Handshake Failed
Cloudflare Код Cloudflare: не удалось TLS-рукопожатие между Cloudflare и исходным сервером — например, потому что на сервере нет действительного сертификата. - 526
Invalid SSL Certificate
Cloudflare Код Cloudflare: в режиме Full (strict) Cloudflare не смог проверить сертификат исходного сервера — он просрочен, самоподписан или выдан на другое имя. - 530
Ошибка Cloudflare 1xxx
Cloudflare Код Cloudflare: отправляется вместе с ошибкой Cloudflare 1xxx, например 1016 (Origin DNS error) или 1033 (Cloudflare Tunnel error).
Как читать HTTP-код ответа
Первая цифра обозначает класс ответа, а две остальные — точное значение внутри этого класса. Если клиент не знает конкретный код, он обрабатывает его как код x00 того же класса: например, незнакомый код 4xx воспринимается как 400 Bad Request.
Поясняющая фраза после числа (reason phrase), например Not Found или Moved Permanently, — это лишь описание для людей. Клиенты ориентируются только на число, а в HTTP/2 и HTTP/3 поясняющая фраза вообще не передается.
Коды редиректов: краткий обзор
- 301 Moved Permanently: постоянный; браузеры могут заменить POST на GET. Стандартный выбор для перенесенных страниц.
- 302 Found: временный; метод может измениться. Используется по умолчанию во многих фреймворках.
- 303 See Other: временный; переход всегда выполняется методом GET. Применяется после отправки форм.
- 307 Temporary Redirect: временный; метод и тело запроса сохраняются.
- 308 Permanent Redirect: постоянный; метод и тело запроса сохраняются.
- 304 Not Modified: не редирект на другой URL, а сигнал о том, что закэшированная у клиента копия все еще актуальна.
Когда какой код использовать, подробно разобрано в статье о кодах редиректов HTTP.
Коды ответа в цепочке редиректов
Цепочка редиректов — это последовательность ответов 3xx, которая завершается окончательным ответом. Посетитель или поисковый робот в итоге получает только последний код ответа, поэтому цепочка, которая заканчивается кодом 404, — это битая ссылка, какими бы аккуратными ни были редиректы перед ней. Код ответа на каждом переходе можно увидеть с помощью проверки редиректов URL, а много URL сразу проверяет массовая проверка редиректов.
Проверка редиректов URL
Бесплатная проверка редиректов TrueURL покажет все коды ответа, которые возвращает URL, — на каждом переходе цепочки.