使用浏览器时会触发多个请求,但使用java httpclient时则不会触发

时间:2012-11-05 07:47:33

标签: browser apache-httpclient-4.x

这是我的应用程序云环境。 我有ELB与粘性会话 - > 2 HA代理 - > 1在jboss上托管我的应用程序的机器。

我正在处理超过1分钟的请求。我在处理请求开始时记录IP地址。 当我通过浏览器处理此请求时,我看到在1分钟和几秒后记录重复请求。如果首先请求来自HAProxy1的路由,则另一个请求从HAProxy2路由。在浏览器上,我在2.1分钟后得到HttpStatus = 0响应

我的想法是ELB正在触发此重复请求。 请帮助我验证这个假设。

当我使用Apache Http Client进行相同的请求时,我看不到重复的请求被触发。此外,我在1分钟和几秒后得到例外。 org.apache.http.NoHttpResponseException:目标服务器无法响应

请帮助我了解这里发生的事情。 -Thanks

1 个答案:

答案 0 :(得分:0)

ELB我认为你指的是亚马逊AWS的弹性负载均衡器。

Elastic Load Balancer具有60秒的内置请求超时,无法更改。浏览器具有智能重试逻辑,因此您会看到两个请求,但您的服务器应该将它们作为两个单独的无关请求进行处理,因此这实际上会使事情变得更糟。使用httpclient,超时会导致NoHttpResponseException,并且不会使用重试。

解决方案是在服务器上提高请求的性能,或者让初始请求触发后台任务,然后是补充请求(可能使用AJAX),轮询完成。