web-dev-qa-db-ja.com

HTTPキープアライブおよびTCPキープアライブ

HTTPキープアライブはどのように実装されますか?内部でTCP Keep Aliveを使用していますか?使用していない場合、サーバーはクライアントが停止しているかどうかをどのように検出しますか?

47
Bruce

HTTPキープアライブは、HTTPプロトコルの機能です。 Keep-Alive機能を実装するWebサーバーは、最後のHTTP応答を送信してから(対応するHTTP要求があった場合)、定期的に(着信HTTP要求について)接続/ソケットをチェックする必要があります。構成されたキープアライブ時間(秒)までにHTTP要求が受信されない場合、Webサーバーは接続を閉じます。 Webサーバーによって「クローズ」が行われた後は、それ以上のHTTP要求はできなくなります。一方、TCPキープアライブはOSによってTCPレイヤーで管理されます。HTTPキープアライブとTCP =キープアライブはまったく無関係です。

21
Ayub

私はこれが古い質問であることを知っていますが、それでも:

  • HTTPキープアライブは、HTTPクライアント(通常はブラウザ)とサーバー(ウェブサーバー)が同じTCP接続を介して複数の要求/応答ペアを送信できるようにする機能です。これにより、2番目、3番目などのHTTPリクエストのレイテンシが減少し、ネットワークトラフィックが減少します。

  • TCPキープアライブはまったく別の獣です。小さなパケットを送信することでTCP接続を開いたままにします。さらに、パケットが送信されると、これはチェックとして機能するため、接続がドロップするとすぐに送信者に通知されます(そうでない場合はそうではないことに注意してください-TCP接続を介して通信しようとするまで、それがどうなるかわかりません大丈夫かどうか)。

HTTPキープアライブに関する質問に回答するには:

How is HTTP Keep Alive implemented? 

簡単に言うと、HTTPサーバーは各応答の後にTCP接続を閉じませんが、他のHTTPリクエストも受信する場合はしばらく待機します。タイムアウト後、とにかくそれを閉じます。

Does it internally use TCP Keep Alive? 

いいえ、少なくとも私には意味がありません。

If not, how does the server detect if the client is dead or alive?

必要はありません-必要はありません。クライアントが要求を送信すると、応答が返されます。クライアントがTCP接続を介して何も送信しない場合(おそらく接続が切断されているため)、タイムアウトにより接続が閉じます。クライアントはもちろんこれに気づき、必要に応じて別のTCP接続を介してリクエストを送信します。

56
johndodo