Расследование 400\ Ошибка неверного запроса возвращена HTTP-сервером IBM
Мы столкнулись с проблемой, когда наш HTTP-сервер IBM возвращает ошибку "400 Bad Request", и мы не можем найти причину.
Этот запрос является запросом SOAP, который, как предполагается, обслуживается службой Tibco SOAP, но запрос не поступает в приложение (в журналах приложений нет журналов о том же самом) - и он ошибается на уровне сервера HTTP.
HTTP-сервер, который мы используем, является только прокси-сервером и просто передает запрос приложению.
Из журналов доступа:
10.239.12.250 - - [17 / Nov / 2016: 10: 23: 19 +0000] "POST / OnlineCheck HTTP / 1.1" 400 - 300 "Java1.7.0_40" 300/300021637
Когда я проверил журналы ошибок:
[Чт, 17 ноября 10:28:19 2016] [error] (70007) Заданный тайм-аут истек: proxy: телу запроса на предварительную выборку не удалось [::1]:9876 (temp.adv.com) с 10.213.123.12
Ошибка возвращается через 5 минут после получения запроса, как видно из логов.
Некоторые моменты, которые следует отметить:
Ошибка только от одного клиента (несколько клиентов используют один и тот же сервис), и они используют OSB/Weblogic для балансировки нагрузки
Это происходит только для 10-20 процентов запросов и является случайным. Тот же запрос при повторной отправке балансировщиком нагрузки (когда он не получает ответа через 2,5 минуты, сервер отвечает правильно)
Я хотел бы знать, есть ли какой-нибудь способ уловить, из-за чего может быть ошибка? Каковы могут быть возможные причины ошибки 400\Bad Request?
1 ответ
Сообщение об ошибке означает, что mod_proxy ожидал тело POST, и оно никогда не передавалось клиентом. Поэтому Content-Length или Transfer-Encoding: chunked, отправленный клиентом, был недействительным, в результате чего получился код состояния 400.
Вы можете раскомментировать LoadModule для "mod_net_trace", чтобы записать ввод-вывод, выполненный для этих запросов, и посмотреть, какое тело ожидалось, и подтвердить, что он никогда не был доступен.
Если вы не доверяете внутреннему представлению того, что было передано, вы можете использовать захват пакета, чтобы подтвердить то же самое.