Расследование 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", чтобы записать ввод-вывод, выполненный для этих запросов, и посмотреть, какое тело ожидалось, и подтвердить, что он никогда не был доступен.

Если вы не доверяете внутреннему представлению того, что было передано, вы можете использовать захват пакета, чтобы подтвердить то же самое.

Другие вопросы по тегам