2013-08-14 5 views
1

У нас есть пользователь, отправляющий POST на наш веб-сервер (Windows Server 2003, IIS 6). Они получают полный ответ от нашего webapp, но затем IIS также отвечает «400 Bad Request». Никакой другой информации не предоставляется (да, я отключил дружественные ошибки).IIS, отвечающий на один запрос с двумя ответами

Сначала я подумал, может быть, это было какое-то промежуточное ПО, впрыскивающее ответ. Тем не менее, мне удалось найти следующее в журналах ошибок HTTPSys, которые подтверждают, что он поступает с нашего сервера:

2013-08-09 23:36:40 11901 80 HTTP/0.0 Unparsed - 400 - BadRequest -

Наверняка все эти ошибки накапливаются, и я понятия не имею, почему. Unparsed на самом деле ничего не говорит мне, поэтому мне нечего делать дальше. Я смог заставить их создать трассировку wirehark, которая показывает, что мы действительно отвечаем полным правильным ответом, а затем добавляем ответ с плохим запросом 400. Я скопировал их запрос ТОЧНО из wirehark и попробовал его с моей машины, и, конечно, я не могу воспроизвести его (я получаю один правильный ответ).

Так что я полностью неспособен воспроизвести ошибку «Unparsed», но я смог получить два ответа от одного запроса. Я намеренно сломал окончание строки между заголовками запроса и телом, и я вернул полный правильный ответ, а затем «Плохой запрос (неверный глагол)».

Два вопроса

1) Кто-нибудь есть какие-либо идеи относительно того, как произвести ошибку «Неанализируемой» в HTTPsys журналов? Любые мысли о том, как я могу воспроизвести это?

2) ПОЧЕМУ IIS отвечает на один запрос с двумя ответами? Это нормальное поведение или указывает на ошибку конфигурации?

Спасибо за каждого, кто желает оказать помощь в этой страшной головной боли!

ответ

1

Идти, чтобы ответить на мой собственный вопрос, потому что я не желал бы этой боли никому другому.

Оказалось, их POST была небольшая ошибка в Content-Length, я имею в виду, это не включая окончательное «\ г \ п», но то, что это граф заканчивал тем, доходя 2.

Причина, по которой это не проявлялось, когда я скопировал точный запрос и отправил его с моей машины, состоял в том, что я не закрыл соединение. По какой-то причине закрытие соединения с FIN фактически делает разницу и вызывает 400 Bad Request.

Не знаете, почему это происходит, возможно, дополнительные символы, отправленные в первоначальном запросе, как-то читаются, когда приходит FIN? Я не знаю, но у вас это есть. Исправьте длину контента, и боль исчезнет.