ウェブサーバーに関する一般的な質問

ウェブサーバーに関する一般的な質問

これまでそれについて考えたことはなかったのですが、今は舞台裏の基本的な事柄について興味があります。1) Web サーバーは各リクエストの後に接続を閉じますか? 2) 複数のブラウザー ウィンドウを開いて、すべてのリクエスト データを Web サーバーから取得する場合、Web サーバーはどの接続が何をリクエストしたかを認識するために、何らかの標準ソケット通信を使用しますか? 3) 空きポートよりも多くのユーザーがいる場合はどうなりますか (たとえば、66k が同時に何かをリクエストしている場合)

ありがとう :)

答え1

  1. リクエストが使用している HTTP のバージョンによって異なります。HTTP 1.0 接続は、サーバーがユーザー エージェントに応答を返し終えるとすぐに閉じられます。HTTP1.1 では、応答がユーザー エージェントに返された後もソケット接続を開いたままにできるキープアライブのサポートが追加されました。この場合、ユーザー エージェントによって、開いている接続を維持すること、つまり、さらにリクエストを送信することを示す Connection: Keep-Alive HTTP ヘッダーが送信されます。
  2. はい。これは基本的なソケット機能です。クライアントは、未使用のローカル ポート (通常は高いポート) でソケットを開き、リモート ホスト上の特定の宛先ポート (例: HTTP の場合は 80) との接続を開こうとします。クライアントが作成する他のすべての接続では、別のポートでローカル ソケットが開きますが、リモート ホスト上の同じポートで接続を試みることはできます。
  3. サーバー上のリスナー プロセスは、複数の着信要求を処理するワーカー プロセスを生成し、リスナーが着信要求を自由に処理できるようにします。ほとんどの HTTP サーバーには、処理する同時要求の数を制御する構成オプションがあります。

答え2

1) 通常、各ページ リクエストは、オープンおよびクローズされた 1 つの接続に制限されます。

2) コンピュータはリクエストごとに送信元ポートを変更します。サーバーはIPと送信元ポートの組み合わせを使用して、どのリクエストがどのホストから来たかを追跡します。

3) サーバーはポート 80 ですべての HTTP 要求に応答します。ただし、クライアントに関しては、1 つのクライアントから同時に 66K の要求を生成できる場合は問題が発生する可能性がありますが、その点についてはよくわかりません。

答え3

1) キープアライブはほとんどの最新の Web サーバーでサポートされているため、ブラウザーがサポートしている場合、Web サーバーは接続ごとに複数のリクエストを処理します。

http://en.wikipedia.org/wiki/HTTP_persistent_connection

2) はい、各接続には IP:PORT のペアである独自のソケットが割り当てられます。

http://en.wikipedia.org/wiki/TCP_sockets

3) 1 つのサーバーから同時に 65,535 人がリクエストしている場合は、一歩下がって、自分が何をしているのか考える必要があります。:) 真面目な話、非常に運が良ければ、この問題が発生する前に負荷分散の必要性を感じるでしょう。もっと早く発生する可能性のある問題は、ファイル記述子が不足することです。bash のデフォルトは 1024 です (bash のマニュアル ページの「ulimit」を参照してください)。

http://en.wikipedia.org/wiki/ファイル記述子

関連情報