Firefoxのように複数のタブを持つことをサポートするWebブラウザでは、異なるWebサイトドメインに行く異なるタブは各ドメインのための専用ポートを使用しますか?.
それとも、ブラウザはすべてのタブ、したがってすべてのドメインを管理するために単一のポートを使用しますか。
はい、彼らがやります。
これがWindows 7上での私の現在のFirefox接続(私は9つの開いたタブを持っている)を示す例です:
ノート:
ローカルポートがすべて異なることがわかります。
リモートポートは通常80(HTTP)、443(HTTPS)、または8080(HTTP Alternate)です。
HTTP
を検索してください。ウェブページをレンダリングする全プロセスは以下に説明される。特にステップ5、6、13、15(太字)を参照してください。
一般に、単一のWebページは複数の接続を使用しますが、そのすべてが同じリモートアドレスになるわけではありません。
これは、Webページには他の場所でホストされているリソース(JavaScriptファイルなど)が含まれていることが多いためです。
同じWebサイト(例:stackoverflow.com)への複数の接続にも異なるローカルポートがあります(それらは異なるページを表示する異なるタブの別々の接続であるため)。
注意:
あなたがウェブを閲覧したときに何が起こるかについて考えたことがありますか?見かけほど単純ではありません。
- お好みのブラウザのアドレスバーにURLを入力します。
- ブラウザはURLを解析して、プロトコル、ホスト、ポート、およびパスを見つけます。
- それはHTTPリクエストを形成します(それはおそらくプロトコルでした)。
- ホストに到達するには、まず人間が読めるホストをIP番号に変換する必要があります。そして、ホスト上でDNSルックアップを行うことによってこれを行います。
- 次に、指定したポート(ほとんどの場合、ポート80)でソケットをユーザーのコンピュータからそのIP番号に開く必要があります
- 接続がオープンされると、HTTP要求はホストに送信されます
- ホストは指定されたポートで待機するように設定されているサーバーソフトウェア(ほとんどの場合はApache)にリクエストを転送します。
- サーバーはリクエストを調べ(ほとんどの場合パスのみ)、リクエストを処理するのに必要なサーバープラグインを起動します(使用するサーバー言語、PHP、Java、.NET、Pythonに対応します)。
- プラグインは完全なリクエストにアクセスし、HTTPレスポンスの準備を始めます。
- 応答を構築するために、データベースが(おそらく)アクセスされます。リクエストのパス(またはデータ)内のパラメータに基づいてデータベース検索が行われます。
- データベースからのデータは、プラグインが追加することを決定した他の情報と共に、長いテキスト文字列(おそらくHTML)に結合されます。
- プラグインは、そのデータを(HTTPヘッダーの形式の)いくつかのメタデータと結合し、HTTP応答をブラウザに送り返します。
- ブラウザはレスポンスを受け取り、レスポンス内のHTML(95%の確率で壊れています)を解析します
- 壊れたHTMLからDOMツリーが構築されます
- HTMLソース(通常は画像、スタイルシート、およびJavaScriptファイル)にある新しいリソースごとに、サーバーに新しい要求が行われます。ステップ3に戻り、各リソースについて繰り返します
- スタイルシートが解析され、それぞれのレンダリング情報がDOMツリーの対応するノードに添付されます
- Javascriptが解析されて実行され、それに応じてDOMノードが移動され、スタイル情報が更新されます。
- ブラウザは、DOMツリーと各ノードのスタイル情報に従って画面にページをレンダリングします。
- 画面にページが表示されます
- あなたは、全体のプロセスが遅すぎるのに悩まされます。
Source Webページのレンダリング - ステップバイステップ
Webサイトへの各接続は、デフォルトの宛先TCP、プレーンHTTPの場合は80、HTTPSの場合は443のソケットを使用します。ソケットを一意にするには、送信元IPアドレス、送信元TCPポート、宛先IPアドレス、および宛先TCPポートの組み合わせが異なる必要があります。
同じコンピュータから同じWebサイトに複数の接続がある場合(Webサイトで1つのIPアドレスしか使用しないと仮定)、異なる送信元TCPポートを使用する必要があります。このように、各接続は一意です。
ただし、HTTP 1.1以降、すべての接続は一定期間持続します(特に断りのない限り)。これは、同じWebサイトから複数のリソースが要求された場合に同じ接続をブラウザで再利用できることを意味します(例:css/jsファイル)。ブラウザに同じWebサイトのインスタンスが複数ある場合も同様です。
Windowsを使用している場合は、netstat -no -p TCP
コマンドを使用すると、アクティブなTCPすべてのソケットと、それに対応するブラウザのプロセスIDが表示されます。
Unix/Linux(この場合はDebian)を使用している場合は、netstat -ntp
またはss -t
コマンドを使用できます。
異なるウェブサイトへのタブに関しては、タプル{ローカルIP、ローカルポート、ターゲットIPである限り、TCPにはローカルポートを異ならせる必要はありませんターゲットポート}は一意です。同じWebサイトへのタブの場合、状況ははるかに複雑です。
ブラウザは、他のクライアントソフトウェアと同様に、同じターゲットへの発信接続ごとに異なるローカルポートを使用します。一般に、画像、CSS、JavaScriptなどの埋め込みリソースを取得するために、任意のWebサイトへの複数の接続を形成します。また、それらの接続を再利用のためにプールします。
同じウェブサイトへの異なるタブが異なる接続を使用するかどうかを言うことはできません、(a)通常単一の接続がないためとにかくタブごとに、そして(b)タイミングと認証次第で、接続はタブ間で再利用されるかもしれません。接続を識別することは不可能であるため、ローカルポートを識別することも不可能です。