Ошибки

Ошибка 400 Bad Request: что значит и как исправить

400 Bad Request — сервер счёл запрос неправильным и не стал его выполнять. Посетителю обычно помогает проверить адрес и очистить cookie сайта. Владельцу сайта стоит посмотреть на заголовок страницы с ошибкой: nginx под одним кодом 400 отдаёт несколько разных проблем, и заголовок сразу подсказывает, какую.

Обновлено 07.10.2026≈ 5 мин чтения
Содержание 8

Что означает код 400

По стандарту HTTP код 400 значит: сервер не может или не хочет обрабатывать запрос, потому что видит в нём ошибку клиента — неверный синтаксис, испорченную структуру сообщения и тому подобное. Это самый общий код ошибки клиента: незнакомый браузеру код 4xx тоже понимается как 400.

Важно, что виноват именно запрос, а не страница. Если бы страницы не было, сервер ответил бы 404, если бы доступ был закрыт — 403.

Четыре вида 400 в nginx

nginx отличает несколько причин внутренними кодами, но посетителю отдаёт одинаковый код 400 — меняется только заголовок страницы с ошибкой.

Заголовок страницыЧто случилосьКод в nginx
400 Bad RequestЗапрос не удалось разобрать: испорченная строка запроса, неверный заголовок, неправильный Host400
400 Request Header Or Cookie Too LargeЗаголовок запроса не поместился в буфер — например, разрослись cookie494
400 The plain HTTP request was sent to HTTPS portНа порт HTTPS пришёл обычный HTTP-запрос497
400 The SSL certificate error или No required SSL certificate was sentСайт проверяет сертификаты посетителей, а сертификат не прошёл проверку или его не прислали495, 496

Если вы посетитель

  1. Проверьте адрес. Лишний символ, пробел или обрезанная ссылка из мессенджера — частые причины.
  2. Откройте сайт в режиме инкогнито. Если там всё работает — дело в cookie: удалите cookie этого сайта в настройках браузера и обновите страницу. Это лечит и «Request Header Or Cookie Too Large».
  3. Если ошибка «The plain HTTP request was sent to HTTPS port», уберите из адреса номер порта (например, :443) и откройте сайт через https://.
  4. Не помогло ни в инкогнито, ни в другом браузере — проблема на стороне сайта. Напишите его владельцу, когда и на какой странице появилась ошибка.

Как найти причину на своём сервере

Сначала посмотрите заголовок страницы с ошибкой — по таблице выше. Потом журнал ошибок nginx; в пакетах Ubuntu и Debian он лежит в /var/log/nginx/error.log.

Подвох: nginx записывает ошибки клиентов на уровне info, а журнал по умолчанию пишет только уровень error и выше. Поэтому при настройках по умолчанию в журнале их не видно. Чтобы увидеть причину, временно включите подробный журнал для нужного сайта:

server {
    ...
    error_log /var/log/nginx/error.log info;
}

Проверьте настройки командой nginx -t, перечитайте их (systemctl reload nginx), повторите запрос и найдите строку, которая начинается с «client sent». Что она значит:

Строка в журналеПричина
client sent invalid method, invalid request или invalid versionСтроку запроса не удалось разобрать — например, на порт пришёл вовсе не HTTP-запрос
client sent too long header lineОдин заголовок длиннее буфера — например, Cookie
client sent invalid host headerНеправильный заголовок Host
client sent HTTP/1.1 request without "Host" headerВ запросе HTTP/1.1 нет обязательного заголовка Host
client sent plain HTTP request to HTTPS portHTTP-запрос на порт HTTPS

Найдя причину, верните прежний уровень журнала: на info он быстро растёт.

Как исправить

Большие заголовки и cookie. Размер задаёт директива large_client_header_buffers: по умолчанию четыре буфера по 8 КБ, и один заголовок не может быть больше одного буфера. Её можно увеличить в блоке http или server:

large_client_header_buffers 4 16k;

Но сначала посмотрите, кто ставит столько cookie: их могут накапливать счётчики, чаты и плагины. Если cookie растут с каждым визитом, увеличение буфера только отложит ошибку.

HTTP-запрос на порт HTTPS. Такие запросы можно отправлять на HTTPS-версию страницы — nginx позволяет перехватить код 497 директивой error_page:

error_page 497 =301 https://$host$request_uri;

Клиентские сертификаты. Коды 495 и 496 появляются, только если в настройках включена проверка сертификатов посетителей (ssl_verify_client). Если вы её не включали намеренно, ищите эту директиву в конфигурации.

Сайт за прокси или CDN. Ошибку 400 могла вернуть не ваша программа, а посредник. Посмотрите заголовок Server в ответе (curl -I адрес) — он подскажет, кто ответил.

Обычный хостинг. Настроек nginx там нет. Проверьте, не повторяется ли ошибка в инкогнито, и напишите в поддержку адрес страницы, время и текст ошибки.

Чем 400 отличается от соседних кодов

КодКогда возникает
400Запрос испорчен, или (в nginx) не помещаются заголовки
401Нужно войти: нет логина и пароля
403Запрос понятен, но доступ запрещён
404Запрос нормальный, но страницы нет
413Слишком большое тело запроса — например, файл при загрузке
414Слишком длинный адрес
431Слишком большие заголовки — так отвечают, например, программы на Node.js; nginx в этом случае отдаёт 400

Источники

Сверено 6 октября 2026 года.

Что почитать дальше

Проверено и обновлено: 07.10.2026