HTTP коды ответов: полный справочник с примерами
HTTP коды состояния — это трёхзначные числа, которые сервер возвращает в ответ на запрос клиента. Они сообщают, что произошло с запросом: успех, перенаправление, ошибка клиента или сервера. Понимание кодов помогает отлаживать проблемы, настраивать мониторинг сайтов и улучшать SEO.
Классификация кодов
| Диапазон | Категория | Описание |
|---|---|---|
1xx | Информационные | Запрос принят, обработка продолжается |
2xx | Успех | Запрос выполнен успешно |
3xx | Перенаправление | Требуется дополнительное действие для завершения |
4xx | Ошибка клиента | Запрос содержит ошибку или не может быть выполнен |
5xx | Ошибка сервера | Сервер не смог обработать валидный запрос |
1xx — Информационные
100 Continue
Сервер получил заголовки запроса и клиент может продолжать отправку тела. Используется при отправке больших данных: клиент сначала отправляет заголовок Expect: 100-continue, и только после получения 100 отправляет тело.
101 Switching Protocols
Сервер переключает протокол по запросу клиента. Типичный случай — upgrade с HTTP на WebSocket:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
103 Early Hints
Новый код, позволяющий серверу отправить предварительные заголовки (например, Link для preload) до формирования основного ответа. Ускоряет загрузку страницы.
2xx — Успех
200 OK
Стандартный успешный ответ. Тело ответа зависит от метода: для GET — запрошенный ресурс, для POST — результат операции.
201 Created
Ресурс успешно создан. Обычно возвращается после POST. Заголовок Location указывает на URL нового ресурса:
HTTP/1.1 201 Created
Location: /api/users/42
Content-Type: application/json
{"id": 42, "name": "John"}
204 No Content
Успех, но тело ответа пустое. Типичный ответ для DELETE и PUT, когда возвращать данные не нужно.
206 Partial Content
Сервер вернул часть ресурса по заголовку Range. Используется для докачки файлов и видеостриминга:
HTTP/1.1 206 Partial Content
Content-Range: bytes 0-999/5000
Content-Length: 1000
3xx — Перенаправление
301 Moved Permanently
Постоянный редирект. Поисковые системы переносят весь ссылочный вес на новый URL. Используйте при смене домена, переходе на SSL/TLS проверку, изменении структуры URL.
Для SEO: 301 — правильный выбор при постоянном переезде. Поисковики удалят старый URL из индекса.
302 Found
Временный редирект. Поисковики сохраняют исходный URL в индексе. Используйте для временного обслуживания или A/B тестов.
Внимание: некоторые клиенты могут сменить метод на GET. Если важно сохранить метод — используйте 307.
304 Not Modified
Ресурс не изменился с момента последнего запроса. Браузер использует кэшированную версию. Работает вместе с ETag и If-None-Match:
GET /style.css HTTP/1.1
If-None-Match: "abc123"
HTTP/1.1 304 Not Modified
ETag: "abc123"
307 Temporary Redirect
Временный редирект с гарантированным сохранением метода и тела запроса. Безопаснее 302 для POST-запросов.
308 Permanent Redirect
Постоянный редирект с сохранением метода. Как 301, но гарантирует, что метод не изменится на GET.
4xx — Ошибки клиента
400 Bad Request
Некорректный запрос — неправильный синтаксис, невалидные параметры, нарушение формата. В API документацию полезно возвращать описание ошибки в теле ответа.
401 Unauthorized
Требуется аутентификация. Сервер должен вернуть заголовок WWW-Authenticate с указанием схемы аутентификации (Bearer, Basic и т.д.).
Отличие от 403: 401 означает «вы не представились», 403 — «вы представились, но доступ запрещён».
403 Forbidden
Сервер понял запрос, но отказывает в доступе. Повторная аутентификация не поможет — у пользователя нет прав.
404 Not Found
Ресурс не найден. Самый известный код ошибки. Причины: удалённая страница, опечатка в URL, битая ссылка.
Для SEO: много 404 ошибок сигнализирует поисковикам о проблемах с сайтом. Настройте редиректы для удалённых страниц.
405 Method Not Allowed
HTTP-метод не поддерживается для данного URL. Заголовок Allow должен содержать допустимые методы.
409 Conflict
Конфликт с текущим состоянием ресурса. Типично для оптимистичной блокировки — клиент пытается обновить ресурс, который уже был изменён другим клиентом.
410 Gone
Ресурс удалён безвозвратно. В отличие от 404, это окончательно. Для SEO: поисковики быстрее удалят URL из индекса.
422 Unprocessable Entity
Синтаксис запроса корректен, но данные содержат семантические ошибки. Часто используется в API для ошибок валидации:
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
{"errors": {"email": "Invalid email format", "age": "Must be positive"}}
429 Too Many Requests
Превышен лимит запросов (rate limiting). Заголовок Retry-After указывает, через сколько секунд можно повторить:
HTTP/1.1 429 Too Many Requests
Retry-After: 60
5xx — Ошибки сервера
500 Internal Server Error
Необработанная ошибка на сервере. Универсальный код для всех непредвиденных сбоев. Проверьте логи сервера.
502 Bad Gateway
Промежуточный сервер (nginx, балансировщик) получил невалидный ответ от upstream-сервера. Типичные причины: падение backend-сервера, таймаут PHP-FPM, перезагрузка приложения.
503 Service Unavailable
Сервер временно недоступен (перегрузка, техобслуживание). Используйте Retry-After для указания ожидаемого времени восстановления. Поисковики не удаляют страницу из индекса при 503.
504 Gateway Timeout
Промежуточный сервер не дождался ответа от upstream. Причины: медленный SQL-запрос, зависший backend, слишком маленький таймаут в nginx.
Коды и SEO
| Код | Влияние на SEO |
|---|---|
| 200 | Страница индексируется нормально |
| 301 | Ссылочный вес передаётся на новый URL |
| 302 | Старый URL остаётся в индексе |
| 404 | Страница удаляется из индекса (со временем) |
| 410 | Быстрое удаление из индекса |
| 503 | Временная недоступность, URL сохраняется |
Проверьте ваш сайт прямо сейчас
Проверить →