私はプロプライエタリツールを使用して、ソフトウェアプロバイダーからソフトウェアをダウンロードしています。バックエンドでは、プレーンhttp(またはオプションでhttps)を使用してソフトウェアを取得するJavaアプリケーションです。
しかし最近、ダウンロードは失敗しています。ダウンロードツールのソースコードにアクセスできず、プロキシサーバーの背後にいることに注意してください。このツールは、実際のダウンロードを開始する前に、同じホストに複数回接続します。これらの接続は、多少遅いように見えますが、通常は成功します(もちろんこれは主観的です)。
ツールはいくつかのロギングを実行し、失敗すると次の例外が発生します。
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)ネットワーク上にないAmazonサーバーにもアクセスでき、問題なくダウンロードを実行します。異なるネットワーク上の少なくとも2人にダウンロードを試してもらいましたが、問題なく動作します。
2)同じサーバーとプロキシを使用して他のhttp / httpsサイトに問題なく接続します。これには、ときどき大量のダウンロードが含まれます。