TL;DR
クライアントとサーバの間の接続に関する情報を指定する HTTP ヘッダである。HTTP リクエストと HTTP レスポンスのどちらにも書ける。
なぜ必要か
HTTP のヘッダには、通信経路上のすべての受信者に向けたもの(エンドツーエンド)と、隣の受信者との接続だけに関係するもの(ホップバイホップ)がある。Connection ヘッダを使うと、この 2 つを区別できる。
仕組み
Connection ヘッダは省略でき、複数の値を指定できる。
RFC 9110 によると、Connection ヘッダには、今の接続に対して送り手が望む制御オプションを並べる。オプションの大文字と小文字は区別しない。プロキシなどの中継者は、転送する前に Connection ヘッダを読み、そこに並んだ名前のヘッダを取り除いてから、Connection ヘッダ自体も取り除くか置き換える。Keep-Alive、TE、Transfer-Encoding、Upgrade などのヘッダは、Connection に書かれていなくても取り除くか置き換えるべきとされている。逆に、すべての受信者に向けたヘッダの名前を Connection に書いてはいけない。
例
Connection: keep-alive: HTTP/1.1 で導入された Keep-Alive を使い、接続を維持するConnection: close: リクエストを処理するたびに接続を切る(HTTP/1.0 のデフォルトの動作)