Keep-Alive and Timeout Behaviours between different browsers on Windows

Short Version

Why does chrome send out keep-alive's while IE and FF don't?

Long Version

Initially, I thought this was a server-side issue.

I've got an apache server that's a frontend proxy for a tomcat webapp. One of the pages on this app takes 15-20 minutes to return results. I've observed that using this page times out when it is accessed via IE or FF. It goes to a standard "cannot be reached" page like you would see if your network cable were disconnected when you tried to access the net. On Chrome, however, it works just fine.

This made me curious, so I spied the traffic with tcpdump on the server, and this I noticed a big difference. While IE and FF were silent until they hit their timeouts, chrome was sending periodic ACK packets to the server (and was getting response ACK's). Also of note, IE/FF both seemed to send the TCP disconnect, rather than receiving any timeout from the server.

So yeah, why does IE/FF disconnect when Chrome doesn't? Why does Chrome send keep-alives and IE/FF doesn't?

I've tried changing the registry settings recommended by MS in this KB article. It didn't seem to change any of the behavior.

Sample Traffic from IE (FF was almost identical)

23:25:56.814732 IP InternetExplorer.27378 > Server.https: . 83070:84430(1360) ack 154 win 65382
23:25:56.814976 IP InternetExplorer.27378 > Server.https: . 84430:85790(1360) ack 154 win 65382
23:25:56.814981 IP Server.https > InternetExplorer.27378: . ack 85790 win 63920
23:25:56.815201 IP InternetExplorer.27378 > Server.https: . 85790:87150(1360) ack 154 win 65382
23:25:56.815418 IP InternetExplorer.27378 > Server.https: . 87150:88510(1360) ack 154 win 65382
23:25:56.815422 IP Server.https > InternetExplorer.27378: . ack 88510 win 63920
23:25:56.815789 IP InternetExplorer.27378 > Server.https: . 88510:89870(1360) ack 154 win 65382
23:25:56.815916 IP InternetExplorer.27378 > Server.https: . 89870:91230(1360) ack 154 win 65382
23:25:56.815922 IP Server.https > InternetExplorer.27378: . ack 91230 win 63920
23:25:56.815929 IP InternetExplorer.27378 > Server.https: P 91230:91283(53) ack 154 win 65382
23:25:56.815940 IP Server.https > InternetExplorer.27378: . ack 91283 win 63920
23:25:56.858469 IP InternetExplorer.27378 > Server.https: . 91283:92643(1360) ack 154 win 65382
23:25:56.858773 IP InternetExplorer.27378 > Server.https: . 92643:94003(1360) ack 154 win 65382
23:25:56.858779 IP Server.https > InternetExplorer.27378: . ack 94003 win 63920
23:25:56.858992 IP InternetExplorer.27378 > Server.https: . 94003:95363(1360) ack 154 win 65382
23:25:56.859284 IP InternetExplorer.27378 > Server.https: . 95363:96723(1360) ack 154 win 65382
23:25:56.859288 IP Server.https > InternetExplorer.27378: . ack 96723 win 63920
23:25:56.859483 IP InternetExplorer.27378 > Server.https: . 96723:98083(1360) ack 154 win 65382
23:25:56.859731 IP InternetExplorer.27378 > Server.https: . 98083:99443(1360) ack 154 win 65382
23:25:56.859734 IP Server.https > InternetExplorer.27378: . ack 99443 win 63920
23:25:56.859737 IP InternetExplorer.27378 > Server.https: P 99443:99496(53) ack 154 win 65382
23:25:56.859743 IP Server.https > InternetExplorer.27378: . ack 99496 win 63920
23:25:56.902029 IP InternetExplorer.27378 > Server.https: . 99496:100856(1360) ack 154 win 65382
23:25:56.902484 IP InternetExplorer.27378 > Server.https: . 100856:102216(1360) ack 154 win 65382
23:25:56.902489 IP Server.https > InternetExplorer.27378: . ack 102216 win 63920
23:25:56.902585 IP InternetExplorer.27378 > Server.https: . 102216:103576(1360) ack 154 win 65382
23:25:56.902932 IP InternetExplorer.27378 > Server.https: . 103576:104936(1360) ack 154 win 65382
23:25:56.902935 IP Server.https > InternetExplorer.27378: . ack 104936 win 63920
23:25:56.903045 IP InternetExplorer.27378 > Server.https: P 104936:105622(686) ack 154 win 65382
23:25:56.903052 IP Server.https > InternetExplorer.27378: . ack 105622 win 63920
23:30:42.621188 IP InternetExplorer.27378 > Server.https: R 105622:105622(0) ack 154 win 9300

Sample traffic from Chrome:

21:58:54.534554 IP chrome.20353 > server.https: P 10125:11337(1212) ack 146 win 65303
21:58:54.534566 IP server.https > chrome.20353: . ack 11337 win 29088
21:58:54.534621 IP chrome.20353 > server.https: P 11337:12549(1212) ack 146 win 65303
21:58:54.534625 IP server.https > chrome.20353: . ack 12549 win 31512
21:58:54.534961 IP chrome.20353 > server.https: . 12549:13761(1212) ack 146 win 65303
21:58:54.534966 IP server.https > chrome.20353: . ack 13761 win 33936
21:58:54.535082 IP chrome.20353 > server.https: P 13761:14392(631) ack 146 win 65303
21:58:54.535086 IP server.https > chrome.20353: . ack 14392 win 36360
21:59:40.021420 IP chrome.20353 > server.https: . ack 146 win 65303
21:59:40.021437 IP server.https > chrome.20353: . ack 14392 win 36360
22:00:25.147256 IP chrome.20353 > server.https: . ack 146 win 65303
22:00:25.147307 IP server.https > chrome.20353: . ack 14392 win 36360
22:01:10.244639 IP chrome.20353 > server.https: . ack 146 win 65303
22:01:10.244669 IP server.https > chrome.20353: . ack 14392 win 36360
22:01:55.410540 IP chrome.20353 > server.https: . ack 146 win 65303
22:01:55.410560 IP server.https > chrome.20353: . ack 14392 win 36360
22:02:40.568607 IP chrome.20353 > server.https: . ack 146 win 65303
22:02:40.568642 IP server.https > chrome.20353: . ack 14392 win 36360
22:03:25.720408 IP chrome.20353 > server.https: . ack 146 win 65303
22:03:25.720438 IP server.https > chrome.20353: . ack 14392 win 36360
22:04:10.861881 IP chrome.20353 > server.https: . ack 146 win 65303
22:04:10.861914 IP server.https > chrome.20353: . ack 14392 win 36360
22:04:55.977031 IP chrome.20353 > server.https: . ack 146 win 65303
22:04:55.977063 IP server.https > chrome.20353: . ack 14392 win 36360
22:05:41.085828 IP chrome.20353 > server.https: . ack 146 win 65303
22:05:41.085848 IP server.https > chrome.20353: . ack 14392 win 36360
22:06:26.251530 IP chrome.20353 > server.https: . ack 146 win 65303
22:06:26.251550 IP server.https > chrome.20353: . ack 14392 win 36360
22:07:11.416086 IP chrome.20353 > server.https: . ack 146 win 65303
22:07:11.416154 IP server.https > chrome.20353: . ack 14392 win 36360
22:07:56.554244 IP chrome.20353 > server.https: . ack 146 win 65303
22:07:56.554275 IP server.https > chrome.20353: . ack 14392 win 36360
22:08:41.713610 IP chrome.20353 > server.https: . ack 146 win 65303
22:08:41.713628 IP server.https > chrome.20353: . ack 14392 win 36360
22:09:26.874657 IP chrome.20353 > server.https: . ack 146 win 65303
22:09:26.874684 IP server.https > chrome.20353: . ack 14392 win 36360
22:10:12.033494 IP chrome.20353 > server.https: . ack 146 win 65303
22:10:12.033512 IP server.https > chrome.20353: . ack 14392 win 36360
22:10:57.266808 IP chrome.20353 > server.https: . ack 146 win 65303
22:10:57.266846 IP server.https > chrome.20353: . ack 14392 win 36360
22:11:42.453183 IP chrome.20353 > server.https: . ack 146 win 65303
22:11:42.453204 IP server.https > chrome.20353: . ack 14392 win 36360
22:12:27.599746 IP chrome.20353 > server.https: . ack 146 win 65303
22:12:27.599787 IP server.https > chrome.20353: . ack 14392 win 36360
22:13:12.762650 IP chrome.20353 > server.https: . ack 146 win 65303
22:13:12.762682 IP server.https > chrome.20353: . ack 14392 win 36360
22:13:57.923229 IP chrome.20353 > server.https: . ack 146 win 65303
22:13:57.923248 IP server.https > chrome.20353: . ack 14392 win 36360
22:14:43.077688 IP chrome.20353 > server.https: . ack 146 win 65303
22:14:43.077716 IP server.https > chrome.20353: . ack 14392 win 36360
22:15:28.252353 IP chrome.20353 > server.https: . ack 146 win 65303
22:15:28.252372 IP server.https > chrome.20353: . ack 14392 win 36360
22:16:13.424019 IP chrome.20353 > server.https: . ack 146 win 65303
22:16:13.424050 IP server.https > chrome.20353: . ack 14392 win 36360
22:16:58.564352 IP chrome.20353 > server.https: . ack 146 win 65303
22:16:58.564368 IP server.https > chrome.20353: . ack 14392 win 36360
22:17:43.725261 IP chrome.20353 > server.https: . ack 146 win 65303
22:17:43.725291 IP server.https > chrome.20353: . ack 14392 win 36360
22:17:48.597411 IP server.https > chrome.20353: . 146:2570(2424) ack 14392 win 36360
22:17:48.682782 IP chrome.20353 > server.https: . ack 2570 win 65448
22:17:48.682804 IP server.https > chrome.20353: . 2570:6206(3636) ack 14392 win 36360
22:17:48.785650 IP chrome.20353 > server.https: . ack 6206 win 65448
22:17:48.785666 IP server.https > chrome.20353: . 6206:11054(4848) ack 14392 win 36360
22:17:48.894777 IP chrome.20353 > server.https: . ack 8630 win 65448
22:17:48.894792 IP server.https > chrome.20353: . 11054:14690(3636) ack 14392 win 36360
22:17:48.905976 IP chrome.20353 > server.https: . ack 11054 win 65448
22:17:48.905990 IP server.https > chrome.20353: . 14690:17114(2424) ack 14392 win 36360
22:17:48.905996 IP server.https > chrome.20353: P 17114:17420(306) ack 14392 win 36360
22:17:48.998232 IP chrome.20353 > server.https: . ack 15902 win 65448
22:17:49.293519 IP server.https > chrome.20353: . 15902:17114(1212) ack 14392 win 36360
22:17:49.412748 IP chrome.20353 > server.https: . ack 17420 win 65448
22:17:49.921452 IP chrome.20353 > server.https: P 14392:14685(293) ack 17420 win 65448
22:17:49.921493 IP server.https > chrome.20353: . ack 14685 win 38784
22:17:49.922027 IP server.https > chrome.20353: P 17420:17862(442) ack 14685 win 38784
22:17:50.323363 IP chrome.20353 > server.https: . ack 17862 win 65006
22:18:04.921966 IP server.https > chrome.20353: P 17862:17899(37) ack 14685 win 38784
22:18:04.922078 IP server.https > chrome.20353: F 17899:17899(0) ack 14685 win 38784
22:18:05.080745 IP chrome.20353 > server.https: . ack 17900 win 64969
22:18:10.030035 IP chrome.20353 > server.https: F 14685:14685(0) ack 17900 win 64969
22:18:10.030079 IP server.https > chrome.20353: . ack 14686 win 38784

Solution 1:

I don't have an answer why, but I also observed the same behaviour. I documented my findings here.

http://app-inf.blogspot.com/2012/09/browser-load-balancer-web-server-mod-jk.html

There may not be a way to change IE to send Keep-alive signals, but we changed a setting on the load balancer "Keep Alive Interval" to maintain the connection. Hopefully this helps.