Keep-AliveKeep-Alive는 지속 연결(persistent connection)의 유지 조건을 미세 조정하는 파라미터를 전달하는 헤더입니다. 연결을 얼마나 오래(timeout), 몇 요청까지(max) 재사용할지에 대한 힌트를 담습니다.
HTTP/1.1은 기본적으로 연결을 유지하며, 이 헤더는 `Connection: keep-alive`와 함께 세부 파라미터를 지정할 때 쓰입니다(예: `Keep-Alive: timeout=5, max=1000`).
TCP·TLS 연결 수립은 비용이 크므로, 하나의 연결로 여러 요청을 처리하는 지속 연결은 지연·자원을 크게 절약합니다. HTTP/1.0에서는 `Connection: keep-alive`를 명시해야 했지만 HTTP/1.1부터는 지속 연결이 기본이며, 종료하려면 `Connection: close`를 보냅니다. Keep-Alive 헤더는 이 지속 연결의 파라미터(유휴 타임아웃·최대 요청 수)를 상대에게 알려주는 부가 정보입니다.
`timeout`은 유휴 상태에서 연결을 최소 몇 초 유지할지의 힌트이고, `max`는 이 연결에서 처리할 최대 요청 수입니다. 값은 강제가 아니라 힌트이며, 양쪽 중 어느 한쪽이라도 조건에 도달하면 연결을 닫을 수 있습니다. 클라이언트와 서버(및 리버스 프록시)의 keep-alive 타임아웃이 어긋나면, 한쪽이 이미 닫은 연결에 다른 쪽이 요청을 보내 경합이 생길 수 있어 값 정렬이 중요합니다.
Keep-Alive와 Connection은 모두 홉 단위 헤더로, HTTP/2·HTTP/3에서는 사용이 금지됩니다. 이 프로토콜들은 하나의 연결에서 다중 스트림을 다중화하므로 연결 재사용 개념이 프로토콜 자체에 내장되어 별도 헤더가 필요 없습니다. 따라서 Keep-Alive는 HTTP/1.x 전용입니다.
Keep-Alive: timeout=<seconds>[, max=<requests>]e.g. Keep-Alive: timeout=5, max=1000
timeout=<seconds> | 유휴 연결을 최소 몇 초 동안 열어 둘지에 대한 힌트. 이 시간 무통신이면 연결을 닫을 수 있음. |
max=<requests> | 이 연결에서 처리할 수 있는 최대 요청 수. 도달하면 연결을 닫음. |