web-dev-qa-db-ja.com

ブラウザはHTTPリクエストごとに新しいTCP=接続を作成しますか?

つまり、HTTPは基本的にTCP上の単なるテキストプロトコルであり、TCPは状態/接続ベースです。つまり、ブラウザはTCP = HTTPリクエストを実行する前にサーバーに送信します。質問:ブラウザは通常、各HTTPリクエストに対して新しいTCP接続を作成しますか?

ブラウザはTCP=リクエストを開いて、ユーザーがそのサーバーで閲覧している限りそれを維持することができますが、サーバーはそれを処理するために大量の最大接続を使用する必要があります。しかし、繰り返しになりますが、ブラウザが要求ごとに接続を作成し、ユーザーが同じサーバー上でたくさん閲覧する場合、それは無駄のように思われます。

24
Xeon06

HTTP/0.9(今後は使用されません)では、各リクエストで個別のTCP接続が使用され、接続の終了により応答の終了が通知されました。

HTTP/1.0では、個別の接続が依然として公式のデフォルトです。ただし、非公式ですが広くサポートされている「Connection: Keep-Alive "リクエストヘッダーは、サーバーがサポートしている場合に永続的な接続をリクエストするために使用できます。

HTTP/1.1では、永続的な接続 デフォルトになりました であり、古いシングルリクエストの動作は明示的にリクエストする必要があります。通常、複数(2〜5)の永続的な接続が使用されます。

(オプションとして、リクエストは パイプライン化 の可能性がありますが、これは実装が難しく、解決するよりも多くの問題(ヘッドオブラインブロッキングなど)を引き起こすため、誰もHTTP/1.xを使用しませんパイプライン処理。)

HTTP/2(別名 [〜#〜] spdy [〜#〜] )は、同時に多くのリクエストを多重化するように特別に設計されました。フレーミング/パケット化レイヤーがあり、応答を任意の順序で同時に到着させることができます。

リソース: Wikipediaの記事 および RFC 2616セクション8.1

30
user1686

「Connection:Keep-Alive」ヘッダーがあります。詳細は enwiki を参照してください。

Wiresharkを使用して接続をキャプチャおよび分析し、すべてのヘッダーを表示できます。

6
Vi.