2017-10-23 13 views
4

私はウェブサイトから情報を取得するアプリケーションを作成しています。このウェブサイトは、データとともに1行のテキストを返します。 これを取得するには、私はちょうどWebClient.DownloadString()を使用しています。これはコードです:Webclientが最初のリクエストで遅い

{ 
     WebClient Client = new WebClient(); 
     Client.Proxy = null; 
     return Client.DownloadString(url); 
    } 

問題は、最初のリクエストに応じて、このプロセスは、常に次のものが時間の正常な量を取る、~21.000msを取ることです。同様の質問があり、pepoleはこの問題を解決してClient.Proxy = null;という行を追加しているようですが、私の問題は解決しません。私のプロキシのインターネット設定は無効になっており、ファイアウォールは何もブロックしていません(無効にしようとしました)。

Googleのような別のウェブサイトを使ってテストしましたが(サーバーの問題ではないことをテストするため)、結果は同じです。私もWebBrowserコントロールとHttpWebRequestを使ってみましたが、結果も同じです。

通常のブラウザ(テスト済みのエッジ、Firefox、およびChrome)で、同じページを読み込むと、キャッシュがクリアされた約200msが必要です。 wiresharkのを使用して

私はこれを得たが、私はそれを解釈する方法がわからない:

Firefoxに:

TCP: 
1. SYN (client-server) 
2. SYN (client-server) 
3. SYN ACK (server-client) 
4. ACK (client-server) 
5. SYN ACK (server-client)  
6. ACK (client-server)  
HTTP: 
5. GET (client-server) 
TCP: 
7. ACK (server-client) 
HTTP: 
5. RESPONSE 200 OK (server-client) (The correct response is received) 
TCP: 
7. ACK (client server) 

そして、私のプログラムで:

私は、まったく同じ手順を取得しますTCPを介して最初に送信されたパケットはIpv4の代わりにIpv6アドレスを使用し、21秒後に残りのパケットを待つため、実際のHTTP GET-RESPONSE時間は短くなります。

+0

httpサーバーに接続すると、httpヘッダーを使用してクライアントとサーバーの間で交信が行われ、共通の通信モードが確立されます。たとえば、サーバーがフランス語にデフォルト設定されていて、クライアントが英語を希望する場合があります。サーバーはURLを別のWebページに転送しますが、時間がかかることがあります。また、最初の接続時にクッキーが確立され、その後の接続でクッキーが使用されるため、クッキーを使用するレスポンスは、クッキーなしの初期接続よりも速くなります。 – jdweng

答えて

0

問題が解決したのは、それがIpv6でした。 http://www.hostame.domian/fileへのリクエストを行う代わりに、私は現在http://xxx.xxx.xxx.xxx/fileをやっているので、Ipv4のアドレスに直接行きます。

短い生きた質問の種類ですが、誰かが同じ問題を抱えていれば助けてくれることを願っています。

関連する問題