Continue
Сервер получил заголовки запроса, клиент может отправлять тело запроса дальше.
Switching Protocols
Сервер согласился сменить протокол по запросу клиента — например, на WebSocket.
Early Hints
Предварительные заголовки, пока сервер готовит основной ответ — браузер может заранее начать загрузку ресурсов.
OK
Запрос выполнен успешно, тело ответа содержит результат.
Created
Запрос выполнен, и в результате создан новый ресурс — типичный ответ на POST.
Accepted
Запрос принят к обработке, но она ещё не завершена — обычно для асинхронных задач.
No Content
Запрос выполнен успешно, но отвечать нечем — тело ответа пустое. Частый ответ на DELETE.
Partial Content
Сервер отдал только часть ресурса по запросу Range — используется при докачке файлов и стриминге видео.
Moved Permanently
Ресурс окончательно переехал на новый адрес, указанный в заголовке Location. Поисковики переносят вес страницы на новый URL.
Found
Временный редирект — ресурс сейчас доступен по другому адресу, но исходный URL остаётся действующим.
Not Modified
Ресурс не изменился с последнего запроса — браузер может использовать закэшированную версию.
Temporary Redirect
Как 302, но строго запрещает менять метод запроса — POST останется POST после перехода.
Permanent Redirect
Как 301, но, в отличие от него, запрещает менять метод запроса.
Bad Request
Сервер не смог разобрать запрос — обычно из-за неверного синтаксиса или некорректных данных.
Unauthorized
Запрос требует аутентификации — нужно передать корректные учётные данные или токен.
Forbidden
Сервер понял запрос, но отказывается его выполнять — доступ к ресурсу запрещён, даже с верной авторизацией.
Not Found
Сервер не нашёл ресурс по указанному адресу.
Method Not Allowed
HTTP-метод запроса не поддерживается для этого ресурса — например, POST на страницу, принимающую только GET.
Request Timeout
Сервер не дождался полного запроса от клиента за отведённое время.
Conflict
Запрос конфликтует с текущим состоянием ресурса — например, при попытке создать уже существующую запись.
Gone
Ресурс раньше существовал, но был окончательно удалён и не появится снова — в отличие от 404 это осознанный факт.
Payload Too Large
Тело запроса превышает лимит, который сервер готов принять.
Unsupported Media Type
Сервер не умеет обрабатывать формат данных, указанный в запросе.
Unprocessable Entity
Запрос синтаксически верен, но данные внутри не прошли валидацию по смыслу.
Too Many Requests
Превышен лимит числа запросов за период времени — сработал rate limiting.
Internal Server Error
Общая ошибка на стороне сервера без уточнения причины — что-то пошло не так в его коде.
Not Implemented
Сервер не поддерживает функциональность, нужную для выполнения запроса.
Bad Gateway
Сервер, работавший как прокси или шлюз, получил некорректный ответ от вышестоящего сервера.
Service Unavailable
Сервер временно не может обработать запрос — перегружен или на обслуживании.
Gateway Timeout
Сервер-шлюз не дождался ответа от вышестоящего сервера за отведённое время.
Что означает первая цифра кода
Коды ответа HTTP разбиты на пять классов по первой цифре: 1xx — информационные (запрос ещё обрабатывается), 2xx — успех, 3xx — редирект на другой адрес, 4xx — ошибка на стороне клиента (неверный запрос, нет доступа, ресурс не найден), 5xx — ошибка на стороне сервера. По одной этой цифре уже понятно, в какую сторону смотреть при отладке, даже не читая точное название кода.
Зачем нужны коды, если есть текст ошибки
Текст сообщения об ошибке пишет каждый сервер по-своему, а числовой код — часть стандарта HTTP и одинаков везде. Скрипт, который обрабатывает ответ сервера, проверяет именно код, а не текст: это предсказуемо работает независимо от языка интерфейса и конкретной формулировки. Разница между похожими кодами тоже не случайна — например, 401 означает «сначала войдите», а 403 — «вы вошли, но сюда всё равно нельзя».