Keep-Alive

Protocol

개요

Keep-Alive(지속 연결)는 하나의 TCP 연결을 여러 HTTP 요청·응답에 재사용해, 요청마다 연결을 새로 맺고 끊는 비용을 없애는 기법입니다.

HTTP/1.1부터는 지속 연결이 기본값이며, 이를 통해 TCP·TLS 핸드셰이크 반복을 피해 지연을 크게 줄입니다.

자세히

HTTP/1.0에서는 요청마다 새 연결을 열고 응답 후 닫았기 때문에, 페이지 하나에 이미지·CSS·JS가 수십 개면 그만큼의 3-way 핸드셰이크(+TLS)가 반복돼 큰 오버헤드가 됐습니다. Keep-Alive는 연결을 열어 둔 채 여러 요청을 흘려보내 이 비용을 상각합니다. `Connection: keep-alive` 헤더와 유휴 타임아웃·최대 요청 수로 제어합니다.

다만 HTTP/1.1의 지속 연결은 한 연결에서 요청을 '순차적으로'만 처리합니다(응답을 받아야 다음을 보냄, 파이프라이닝은 사실상 미사용). 그래서 앞 응답이 느리면 뒤 요청이 막히는 애플리케이션 계층 Head-of-Line 블로킹이 생기고, 브라우저는 이를 회피하려 오리진당 6개 정도의 병렬 연결을 엽니다. HTTP/2의 멀티플렉싱은 하나의 연결에서 여러 스트림을 동시에 처리해 이 한계를 근본적으로 개선했습니다.

관련 타입