Network

HTTP Persistent Connection

kmkunk 2021. 11. 26. 14:39

1. HTTP Persistent Connection(HTTP Keep-Alive, HTTP Connection Re-use)

Multiple Connections, Persistent Connection 비교

- 하나의 TCP 연결은 사용하여 복수의 HTTP 요청/응답을 주고 받는 개념을 의미한다.

- HTTP/2 버전은 클라이언트와 서버 사이에 HOL(Header of Line blocking, 응답 지연) 없이 Stream 형태로 요청/응답을 주고 받을 수 있는 Multiplexing 기능을 제공하기 때문에, HTTP/2 버전부터는 Persistent Connection을 고민할 필요가 없다.

 

1.1 HTTP 1.0 초기

3-Way handshake

- HTTP 통신을 통해 여러 오브젝트를 요청/응답해야 하는 경우, 요청 때마다 TCP 연결을 3-Way handshake 방식으로 맺어야 했다.

- 웹의 초창기에는 웹을 통해 전달해야 하는 사이트의 컨텐츠 수가 많지 않았기 때문에 다수의 TCP 연결 사용으로 인한 부담이 크지 않았다. 그러나 이미지 등 멀티미디어 방식의 웹 사이트의 컨텐츠가 늘어나면서 TCP 연결의 재사용이 필요하게 되었다.

 

1.2 HTTP Persistent Connection 적용

- HTTP1.0 기반에서 Persistent Connection을 적용하기 위해서, 클라이언트는 서버에 HTTP 요청 시 request message 내 헤더에 아래의 헤더를 추가해야 한다. 또한 해당 request를 수용한 서버는 HTTP 응답 이후 TCP 연결을 끈지 않고 계속 사용하겠다는 약속으로 동일한 헤더를 HTTP 응답에 포함해야 한다.

Connection: keep-alive

- HTTP1.1에서는 Connection 헤더를 사용하지 않더라도 모든 요청/응답이 기본적으로 Persistent Connection을 지원하도록 되어 있다. 그렇기 때문에 Persistent Connection이 필요 없을 경우에만 Connection 헤더를 사용한다.

<!-- Persistent Connection 적용 request : Connection 헤더 X -->
<!-- Persistent Connection 적용 response : Connection 헤더 O -->
Connection: keep-alive

<!-- Persistent Connection 비적용 request : Connection 헤더 O -->
Connection: Close
<!-- Persistent Connection 비적용 response : Connection 헤더 O -->
Connection: close

 

참고

- https://brunch.co.kr/@sangjinkang/4