HTTP-ошибка 400 Bad Request¶
HTTP-ошибка 400 Bad Request — код состояния протокола HTTP, указывающий на то, что сервер не смог обработать запрос из-за некорректного синтаксиса или ошибок со стороны клиента. Код относится к классу клиентских ошибок (4xx) и означает, что проблема возникла не на стороне сервера, а при формировании или передаче запроса. Сервер отклоняет запрос, не пытаясь его обработать, и возвращает клиенту сообщение об ошибке.
¶Классификация и место в HTTP
Коды состояния HTTP делятся на пять классов: 1xx (информационные), 2xx (успешные), 3xx (перенаправления), 4xx (ошибки клиента) и 5xx (ошибки сервера). Код 400 входит в класс 4xx и официально именуется Bad Request — «некорректный запрос». Он был описан в первом стандарте HTTP (RFC 1945, 1996 год) и сохранён в актуальной версии протокола HTTP/1.1 (RFC 9110).
В стандарте код 400 определяется как «общая ошибка запроса», которую сервер не может обработать из-за некорректного синтаксиса. Это означает, что сервер не нашёл в запросе ошибок в отдельных полях, но запрос в целом непригоден для обработки.
¶Основные причины возникновения
Ошибка 400 может быть вызвана множеством факторов. Наиболее распространённые причины:
- Некорректный синтаксис URL — лишние пробелы, недопустимые символы, сломанная кодировка, ошибки при ручном вводе адреса.
- Слишком большой запрос — превышение лимита размера тела запроса, установленного сервером (например, при загрузке файлов).
- Ошибки в заголовках запроса — некорректный формат, отсутствие обязательных заголовков, несоответствие значений.
- Невалидные данные формы — отправка данных, не прошедших проверку на стороне клиента (например, неверный формат даты или email).
- Ошибки в cookies — повреждённые или устаревшие cookie-файлы, несоответствие ожидаемому формату.
- Проблемы с кодировкой — запросы с символами, не поддерживаемыми сервером, или с некорректной кодировкой.
- Конфликты расширений браузера — некоторые расширения модифицируют заголовки запросов, что может приводить к ошибке.
¶Отличие от других кодов 4xx
Ошибка 400 часто путают с другими кодами клиентских ошибок. Ключевые различия:
| Код | Название | Значение |
|---|---|---|
| 400 | Bad Request | Общая ошибка синтаксиса запроса |
| 401 | Unauthorized | Требуется аутентификация |
| 403 | Forbidden | Доступ запрещён, хотя запрос корректен |
| 404 | Not Found | Запрашиваемый ресурс не найден |
| 405 | Method Not Allowed | HTTP-метод не поддерживается для ресурса |
| 413 | Payload Too Large | Тело запроса превышает допустимый размер |
| 414 | URI Too Long | URL превышает допустимую длину |
| 429 | Too Many Requests | Превышен лимит запросов (rate limit) |
В отличие от 404, где ресурс существует, но не найден, ошибка 400 означает, что сам запрос не может быть обработан. В отличие от 403, где сервер понимает запрос, но отказывает в доступе, при 400 сервер не может разобраться в запросе.
¶Как исправить ошибку 400
Для пользователя:
- Проверить корректность введённого URL — удалить лишние символы, пробелы, исправить опечатки.
- Очистить cookies и кэш браузера — часто помогает при повреждённых cookie-файлах.
- Отключить расширения браузера — особенно те, которые модифицируют заголовки запросов.
- Разбить большой запрос на несколько меньших — при загрузке файлов или отправке данных.
- Проверить формат отправляемых данных — убедиться, что поля заполнены корректно.
Для разработчика:
- Проверить логи сервера — там обычно указана конкретная причина отказа.
- Валидировать данные на стороне клиента до отправки запроса.
- Убедиться в корректности формирования заголовков и тела запроса.
- Проверить работу прокси-серверов и CDN — они могут модифицировать запросы.
- Использовать инструменты отладки (например, DevTools в браузере) для анализа запроса.
¶Специфические случаи
¶Ошибка 400 в Google
Поисковая система Google возвращает ошибку 400 при некорректных поисковых запросах, например, при использовании недопустимых операторов или слишком длинных запросов.
¶Ошибка 400 в API
REST API часто возвращают 400 с телом ответа, содержащим детали ошибки в формате JSON — например, указание конкретного поля, прошедшего валидацию. Это помогает разработчикам быстро находить причину проблемы.
¶Ошибка 400 в Nginx
Веб-сервер Nginx возвращает 400 при некорректных запросах, включая проблемы с заголовком Host, некорректный синтаксис запроса или превышение лимита размера заголовков (по умолчанию — 4 КБ на заголовок).
¶Интересные факты
- Код 400 — один из самых старых кодов HTTP, описанных ещё в протоколе HTTP/0.9.
- Некоторые серверы возвращают 400 вместо более специфичных кодов (413, 414), что затрудняет диагностику.
- В стандарте HTTP/2 и HTTP/3 код 400 сохраняет своё значение, хотя механизмы передачи запросов существенно изменились.
Источники:
- RFC 9110 — HTTP Semantics
- RFC 1945 — Hypertext Transfer Protocol — HTTP/1.0
- MDN Web Docs — HTTP response status codes
- Документация Nginx — HTTP core module
