我最近开始使用我的java webserver应用程序,我在客户端检测到一个非常奇怪的500ms网络延迟。
当我第一次请求我的网络服务器时,我得到以下时间:
$ curl --max-redir 0 -w "%{time_total}\n" http://ip_to_my_domain/abc
0.527
然后所有后续调用都将花费预期时间:
$ curl --max-redir 0 -w "%{time_total}\n" http://ip_to_my_domain/abc
0.067
$ curl --max-redir 0 -w "%{time_total}\n" http://ip_to_my_domain/abc
0.062
$ curl --max-redir 0 -w "%{time_total}\n" http://ip_to_my_domain/abc
0.063
在Google和SO上搜索后,我发现了post,其中提到了TCP延迟ACK。
这是我自己的wireshark分析:
不遵循重定向(第一次通话,500ms): 。 Larger version
重定向后(第一次呼叫,500毫秒): Larger version
重定向后(后续调用,无500ms): Larger version
如果这确实是TCP延迟ACK的表现,并且因为我显然无法访问客户端操作系统/浏览器配置,我可以在服务器端代码或网络配置上做什么避免这种行为?
我可以访问webserver应用程序(运行jetty 8.1.1)代码和servers / lb /防火墙配置。
提前感谢您的帮助。
修改
Chrome上的相同行为:
和FF:
修改
有关302的更多数据(我选择了Wirehark转储,而不是重定向):
框:
的Eth:
IP:
TCP:
HTTP: