정의

HTTP는 기본적으로 비연결성을 가진다. 하지만 연결과 끊기 과정은 많은 비용이 필요하다. 이러한 문제를 해결하기 위해 HTTP/1.1이후로 Connection 헤더에 keep-alive를 적용할 수 있게 됐다.

요청이 처리된 후에도 connection을 유지하는 것을 말한다.

장점

  1. 네트워크 연결비용이 감소한다. 위에서 언급했듯이 연결에는 많은 비용이 발생하기 때문에 이를 유지함으로써 요청을 줄일 수 있다.
  2. 한 도메인 서버에 여러 connection보다 한 connection으로 이용하는 것이 비용 측면에서도 좋다.
  3. latency감소 3-way handshake을 맺으면서 필요한 round-tip이 줄어들기 때문에 latency가 감소한다.

방법

Connectionkeep-alive 값을 입력하고 Keep-Alivetimeoutmax 값을 넣어준다.

HTTP/1.0 200 OK
Connection: keep-alive
Keep-Alive: timeout=5, max=100

timeout : connection이 얼마나 오래 유지될지를 결정한다.

max : connection이 연결된 상태에서 주고받을 수 있는 request의 최대 갯수

주의점

  1. request header에 ConnnectionKeep-Alive 값을 항상 담아야 끊기지 않는다.
  2. Content-Legth를 정확하게 사용해야 한다.
  3. Client가 언제든 close될 수 있기 때문에 retry로직을 준비해야 한다.

Keep-Alive의 대안: HTTP/1.1

기본 default값이 persistent connection이다. 이를 끊기 위해서는 Connection: close를 이용해야 한다.

정리