私はウェブサイトから情報を取得するアプリケーションを作成しています。このウェブサイトは、データとともに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時間は短くなります。
httpサーバーに接続すると、httpヘッダーを使用してクライアントとサーバーの間で交信が行われ、共通の通信モードが確立されます。たとえば、サーバーがフランス語にデフォルト設定されていて、クライアントが英語を希望する場合があります。サーバーはURLを別のWebページに転送しますが、時間がかかることがあります。また、最初の接続時にクッキーが確立され、その後の接続でクッキーが使用されるため、クッキーを使用するレスポンスは、クッキーなしの初期接続よりも速くなります。 – jdweng