Dlaczego agent użytkownika przesyła ponownie żądanie po zresetowaniu TCP przez serwer?

Niedawno zauważyliśmy problem, w którym niektóre aplikacje użytkownika powtarzały to samo żądanie POST bez fizycznego wyzwalania go przez użytkownika.

Po dalszych badaniach zauważyliśmy, że dzieje się to tylko wtedy, gdy żądanie przechodzi przez nasz system równoważenia obciążenia i gdy serwer długo przetwarzał żądanie. Sesja przechwytywania pakietów ujawniła ostatecznie, że system równoważenia obciążenia porzuca połączenie po upływie 5 minut, wysyłając reset TCP do klienta; klient automatycznie ponownie złożył żądanie bez interwencji użytkownika.

Zaobserwowaliśmy to zachowanie w kliencie HTTP Apache dla Java, Firefox i IE 8. (Nie mogę zainstalować innych przeglądarek, aby przetestować).

Wydaje się, że zdarza się to tylko wtedy, gdy pierwsze żądanie zostanie przesłane za pośrednictwem utrzymywanego połączenia TCP.

questionAnswers(1)

yourAnswerToTheQuestion