web-dev-qa-db-ja.com

HTTPリクエスト中の接続タイムアウトとは

「接続タイムアウト」に関する2つの説明を見つけました。

  1. クライアントが[timeout]秒の間にサーバーにバイトを送信しない場合、サーバーはソケット接続を閉じます。 HTTPヘッダー(Connection: keep-alive)。

  2. その間にソケット接続が確立されなかった場合、クライアントは[timeout]秒後にサーバーへの接続試行を停止します。

だから私は定義について混乱しています。接続タイムアウトとは何ですか?クライアント側の接続タイムアウトとサーバー側の接続タイムアウトの違いは何ですか?

また、TimeToLive、接続タイムアウト、要求タイムアウトの違いは何ですか?

5
欧阳维杰

もう少し非公式に答えようとします。

接続タイムアウト-クライアントとサーバー間の接続を確立する必要がある期間です。ブラウザ(クライアント)をあるWebサイト(サーバー)に移動するとします。何が起こるかというと、ブラウザはそのサーバーからの応答メッセージのリッスンを開始しますが、さまざまな理由でこの応答が届かない場合があります(サーバーがオフラインなど)。そのため、X秒後にサーバーからの応答がまだない場合、ブラウザーは待機を「あきらめ」ます。そうしないと、永遠に待機してスタックする可能性があります。

リクエストのタイムアウト-クライアントがサーバーからの応答をあまり長く待たない前のケースのように、サーバーも未使用の接続を長時間維持しません。サーバーとクライアント間の接続が確立されると、クライアントは、サーバーに情報を送信して、サーバーがまだ存在することを定期的にサーバーに通知する必要があります。クライアントが指定された時間内にサーバーへの情報の送信に失敗した場合、サーバーは、クライアントがそれと通信するためにもはや存在しないと考えるため、この接続を単にドロップします(リソースを無意味に浪費する理由)。

Time to live(TTL)-パケット内で指定された値であり、パケットが作成されるときに設定され(通常255)、ネットワーク内でパケットが存続できる時間を示します。このパケットがネットワークを通過すると、パケットの発信元と宛先の間のパス上にあるルーターに到着します。ルーターはパケットを再送するたびに、そのTTL値を1ずつ減らします。その値が0に下がると、パケットを再送する代わりに、ルーターはパケットがこのメカニズムは、限られた量の「時間」の間だけ各パケットがその内部に存在できるため、データによるネットワークのフラッディングを防ぐために使用されます。

13
Matus Dubrava