Keep-Alive
GPT-4o.icon
Keep-Alive は、HTTP/1.0 以降に導入された 接続の再利用を可能にする仕組み です。
🔧 なぜ必要か?
通常の(非Keep-Alive)通信
HTTP/1.0では、デフォルトで以下のようにリクエストごとに接続を確立・切断していました。
code:_
1. TCP 接続を確立
2. HTTP リクエスト送信
3. HTTP レスポンス受信
4. TCP 接続を切断
これでは以下のようなデメリットがあります:
オーバーヘッド大(TCPコネクションの確立/切断に時間がかかる)
画像・CSS・JSなど多数のファイルを読み込むのに不利
リソース消費が激しい
Keep-Alive(持続的接続)の場合
Keep-Aliveを使うと、1回TCP接続を確立すれば複数リクエストをその接続上で行えるようになります。
code:_
1. TCP 接続を確立
2. HTTP リクエスト1送信
3. HTTP レスポンス1受信
4. HTTP リクエスト2送信(同じ接続)
5. HTTP レスポンス2受信
...
n. TCP 接続を切断(タイムアウト or 明示的終了)
🛠 使い方(HTTPヘッダー)
HTTP/1.0 の場合
HTTP/1.0 ではデフォルトで接続を閉じるので、明示的に以下のようなヘッダーを追加します:
code:http
Connection: Keep-Alive
また、サーバー側も以下のように応答することがあります:
code:http
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
HTTP/1.1 の場合
HTTP/1.1 では Keep-Alive がデフォルト なので、明示的に Connection: close を指定しない限り、接続は維持されます。
code:http
Connection: close ← 明示的に切断したい場合
🧠 Keep-Alive のメリット
✅ 高速化:ページ表示が速くなる
✅ 接続数の削減:TCP接続の数を減らせる
✅ サーバー負荷の軽減:コネクション確立コストが減る
⚠️ 注意点
クライアントとサーバーが両方対応している必要あり
長くつながったままだと リソースを専有するリスク
適切な タイムアウト設定や接続数制限が重要
🧪 関連技術
HTTP/2, HTTP/3 では Keep-Alive の概念がさらに発展し、**多重化(Multiplexing)**によってもっと効率的に。
WebSocket や gRPC でも、持続的接続の発展形として活用されています。