通过HTTP下载特定站点的问题

时间:2012-09-12 09:53:39

标签: java http tcp

我正在使用专有工具从软件提供商处下载软件。在后端,它是一个java应用程序,它使用普通的http(或可选的https)来检索软件。

最近,下载失败了。请注意,我无法访问下载工具的源代码,而且我无法访问代理服务器。在开始实际下载之前,该工具会多次连接到同一主机。这些联系通常是成功的,虽然它们看起来有些慢(当然这是主观的)。

该工具执行一些日志记录,当它失败时,我们会遇到以下异常:

java.net.SocketException: Connection reset
 at java.net.SocketInputStream.read(SocketInputStream.java:168)
 at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
 at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
 at sun.net.www.MeteredStream.read(MeteredStream.java:116)
 at java.io.FilterInputStream.read(FilterInputStream.java:116)
 at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2676)

当通过wireshark收听时,我看到了一些奇特的行为(或者至少是我未经训练的眼睛所特有的)。 下载将“正常”进行一段时间,直到发生这种情况:

  • 我们的服务器不会发送特定数据包的ACK
  • 代理服务器(超时后)执行重传
  • 我们的服务器发送ACK
  • 在3分钟后(代理服务器上配置超时)之后不再发生流量,代理发送TCP RST并得到上述java错误

一些额外的信息:

1)我还可以访问不在我们网络上的亚马逊服务器,它可以毫不费力地执行下载。我们已经要求不同网络上的至少2个人尝试下载,并且它可以完美运行。

2)我们使用相同的服务器和代理连接到其他http / https网站,没有任何问题,这包括不时的大量下载

1 个答案:

答案 0 :(得分:0)

这是通过调整代理服务器上的一些超时设置来解决的,尽管他们没有给我们很多反馈,关于究竟是什么改变了,或者为什么只有这个特定网站受到影响。