HTTPQUERY
日本語

Connection

使い方

Connection ヘッダーは HTTP/1.1 におけるホップバイホップのヘッダーで、基盤となる TCP 接続のライフサイクルを管理するために使われます。クライアントやサーバーは、接続を追加のリクエストのために維持するのか、現在のやり取りの後に閉じるのかを示すためにこのヘッダーを含めます。

HTTP/1.1 では、持続的接続が既定の挙動です。Connection: keep-alive を送ることは技術的には冗長ですが、実際には今もよく使われています。Keep-Alive ヘッダーは Connection ヘッダーと連携して、持続的接続のタイムアウトやリクエスト数の上限を設定します。

Connection ヘッダーにはもう 1 つの役割があります。メッセージに含まれるホップバイホップのヘッダーフィールド名を列挙することです。中間装置(プロキシ、ゲートウェイ)は、メッセージを次のホップへ転送する前に、Connection の値に列挙されたヘッダーをすべて削除します。

注意

HTTP/1.0 ではリクエストとレスポンスのやり取りごとに接続を閉じるのが既定だったため、持続的接続には Connection: keep-alive が必要でした。HTTP/1.1 は既定を逆転させたため、Connection: close を明示的に送らない限り接続は維持されます。一連のリクエストの最後の 1 件の後にサーバーのリソースを解放する場合や、サーバーが高負荷の場合には Connection: close を送ってください。

注意

Connection ヘッダーは HTTP/2 と HTTP/3 では禁止されています。これらのプロトコルは独自のフレーミング層で接続のライフサイクルを管理します。HTTP/1.1 と HTTP/2 の間で変換を行うプロキシは、このヘッダーを自動的に取り除きます。

keep-alive

keep-alive ディレクティブは、送信側が以降のリクエストのために接続を開いたままにしたいことを示します。これは HTTP/1.1 の既定です。これが存在する場合、Keep-Alive ヘッダーがアイドルタイムアウトや最大リクエスト数といったパラメーターを提供します。

close

close ディレクティブは、現在のリクエストとレスポンスの組を完了した後に接続を閉じるよう相手方に伝えます。HTTP/1.0 では、トランザクションごとに閉じるのが既定の挙動でした。

例

クライアントが明示的な keep-alive ディレクティブを付けてリクエストを送ります。これはレスポンスを配信した後も TCP 接続を開いたままにするようサーバーに伝えます。

GET /api/status HTTP/1.1
Host: api.example.re
Connection: keep-alive

サーバーが、このレスポンスを配信した後に接続を閉じることを示します。クライアントは次のリクエストのために新しい TCP 接続を開きます。

HTTP/1.1 200 OK
Content-Type: application/json
Connection: close

Connection ヘッダーはホップバイホップのヘッダーも列挙します。この例では、プロキシはメッセージを転送する前に X-Debug-Token ヘッダーを取り除きます。

GET /resource HTTP/1.1
Host: example.re
Connection: keep-alive, X-Debug-Token
X-Debug-Token: abc123