web-dev-qa-db-ja.com

http2 TCP接続はいつ閉じますか?

Http2が1つのtcp接続を使用して複数のリクエストを処理することを理解しています。たとえば、a.cssとa.jsを含むindex.htmlをリクエストすると、これら3つのリクエストは1つのtcp接続で実行されます。

ユーザーがindex2.htmlをクリックするとどうなりますか?このリクエストは以前と同じTCP接続を使用していますか?その場合、ユーザーがブラウザを閉じるまで、ブラウザは接続を開いたままにしますか?そしてサーバー側では、サーバーは常に多くの接続を開いたままにしていますか?

14
Sato

HTTP/2を使用する場合、ブラウザは通常、ドメインごとに1つの接続のみを開きます。

あなたの例では、index2.htmlは、index.htmla.cssおよびa.jsに使用されたのと同じTCP接続で送信されます。

HTTP/2では、リクエストは同じTCP接続で多重化されるため、ブラウザは、前のリクエストへの応答を待たずに、リクエストを同時に送信できます。

ブラウザーとサーバーの両方に、TCP接続のアイドルタイムアウトがあります。接続が十分に長い間アイドル状態である場合、リソースを節約するために、どちらかのパーティ(アイドルタイムアウトが短い方)によって閉じられます。たとえば、wikipedia.orgへの接続を開き、いくつかの要求を実行してから、そのタブを離れて別の作業を行うことができます。しばらくすると(通常30秒)、ブラウザはTCPへのwikipedia.orgへの接続を閉じます。

サーバー側では、サーバーは、クライアントによって閉じられるまで、またはサーバー側のアイドルタイムアウトが発生するまで、さまざまなクライアントからの接続を開いたままにします。その時点で、TCP接続。

HTTP/2では、サーバーが維持する必要のある接続の数は、HTTP/1.1の場合よりも大幅に少なくなります。 HTTP/2では、サーバーはクライアントごとに1つのTCP接続のみを維持する必要があります。 HTTP/1.1では、サーバーはクライアントごとに通常2〜8個のTCP接続を維持する必要がありました。

17
sbordet