0

HTTPキープアライブに関して、クライアント側でリクエストタイムアウトをどのように処理する必要がありますか? たとえば、次のような流れがあります。

  • クライアントは Request1 を送信します。
  • クライアントは 1 分間待機します。
  • クライアントは Request1 が失敗したと見なし、それを再送信します。つまり、新しい Request2 = Request1 を送信します。
  • サーバーは Response1 (Request1 に対する応答) で応答します。
  • クライアントはこれが Request2 への応答であると想定しますが、Request1 = Request2 であるため処理できます。
  • クライアントは Request3 を送信します。
  • サーバーは Response2 (Request2 に対する応答) で応答します。
  • クライアントは、これが Request3 への応答であると想定し、処理に失敗します。

仕様に情報が見つかりませんでした。接続がサーバーによって閉じられた場合に再試行する方法は記載されていますが、リクエストの処理に時間がかかりすぎた場合の状況については何もありません。

4

1 に答える 1

0

私は ASP.NET の経験がありますが、このパラダイアグラムがすべての HTTP パイプラインに使用されているかどうかはわかりません。これが私が理解していることです:

  • 応答は要求に結び付けられます。C# には、HttpContextこれを容易にする があります。新しいリクエストは、他のリクエストの安全なコンテキストを持たない別のスレッドで受信されます。
  • クライアントが (たとえば、 を介してWebRequest) 要求を行うと、応答はその要求に結び付けられます。

したがってRequest1、あなたの例では、 と混同されることはありませんRequest2keep-aliveHTTP 要求ヘッダーで使用される は、他の要求に再利用できるように、基になるTCP接続を閉じてはならないことを示します。私が理解している限り、単一のリクエストがタイムアウトしても、基礎となる TCP 接続には影響しません。つまり、TCP 接続が共有されていても、要求と応答のメカニズムは通常どおり機能します。

于 2015-12-17T13:45:28.923 に答える