Apache Error AH02429: Response header contains invalid characters — Решение
Клиент получает ошибку 502 Bad Gateway или 500 Internal Server Error при выполнении динамических запросов. В error.log Apache регистрируется отказ обработки ответа бэкенда: [http:error] [pid 1234:tid 5678] [client ...] AH02429: Response header name 'X-My_Header:' contains invalid characters, aborting request или Response header name contains invalid characters, aborting request.
| Недопустимый символ в заголовке | Пример сбойного заголовка | Требование стандарта RFC 7230 |
|---|---|---|
| Символ подчеркивания / спецсимволы | Header_Name: value | Имена заголовков должны содержать только буквы, цифры и дефисы (-) |
| Пробел перед двоеточием | Content-Type : text/html | Пробелы между именем заголовка и двоеточием строго запрещены |
Символы перевода строки \r\n | Set-Cookie: val\n\t | Защита от атак внедрения заголовков (HTTP Response Splitting) |
- Apache принудительно обрывает сессию с upstream-приложением из-за строгой валидации протокола HTTP.
- Ошибка часто проявляется после обновления Apache до версий 2.4.25+ с усиленной безопасностью парсера.
- Основное исправление (на стороне бэкенда): Найдите скрипт бэкенда (PHP, Node.js, Python), отдающий заголовок, и исправьте его имя в соответствии со стандартами HTTP (замените пробелы и подчеркивания на дефисы):
// НЕПРАВИЛЬНО (ВЫЗЫВАЕТ AH02429): header("Custom_Auth_Token: 12345"); // ПРАВИЛЬНО: header("Custom-Auth-Token: 12345"); - Убедитесь, что в коде приложения перед двоеточием в имени заголовка нет случайных пробелов:
// НЕПРАВИЛЬНО: header("Content-Type : application/json"); // ПРАВИЛЬНО: header("Content-Type: application/json"); - Если вы временно не можете изменить исходный код бэкенда, ослабьте строгость HTTP-парсера Apache с помощью директивы
HttpProtocolOptions:# В apache2.conf или httpd.conf: HttpProtocolOptions Unsafe - Проверьте синтаксис конфигурации:
sudo apache2ctl configtest. - Перезапустите Apache:
sudo systemctl restart apache2 # или httpd.
HttpProtocolOptions Unsafe является временным обходным решением (workaround). Это делает сервер потенциально уязвимым к атакам типа HTTP Request Smuggling и Response Splitting. Всегда стремитесь исправлять некорректные заголовки в коде приложений.Частые вопросы (FAQ)
Почему Apache стал блокировать заголовки, которые раньше работали?
В рамках устранения масштабных уязвимостей HTTP Smuggling разработчики Apache внедрили строгое соответствие спецификациям RFC 7230, запретив любые нестандартные символы в именах заголовков.
Какие символы допустимы в именах HTTP-заголовков?
Разрешены только символы US-ASCII: буквы латиницы (A-Z, a-z), цифры (0-9) и знаки ! # $ % & ' * + - . ^ _ ` | ~ (на практике используются только буквы, цифры и дефис).
Могут ли модули mod_headers вызывать AH02429?
Да, если директива Header set содержит опечатку или пробел в названии заголовка, например Header set 'Bad Header' 'value'.
Что означает директива HttpProtocolOptions Strict?
Это режим по умолчанию в Apache 2.4, требующий строгого соблюдения спецификаций протокола HTTP/1.1 и блокирующий любые сомнительные символы в запросах и ответах.