1

我正在使用专有工具从软件提供商处下载软件。在后端,它是一个 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 站点没有问题,这包括不时的大下载

4

1 回答 1

0

通过调整代理服务器上的一些超时设置来解决这个问题,尽管他们没有给我们太多反馈,说明究竟发生了什么变化,或者为什么只有这个特定站点受到影响。

于 2013-01-02T08:16:42.120 回答