본문 바로가기
카테고리 없음

HTTP 지속적 연결 상태

by 뽀도 2019. 9. 18.

<요약>

HTTP 요청과 응답시 다수의 TCP 연결을 줄이기 위한 방법.

 

<설명>

HTTP 지속적 연결 상태, HTTP 영구 접속(HTTP persistent connection) 또는 Http 킵얼라이브(HTTP Keep-alive), Http 연결 재사용은 하나의 TCP 연결을 사용하여 복수의 HTTP 요청/응답을 주고 받는다는 개념으로, 매 요청/응답 쌍마다 새로운 요청을 여는것과는 반대되는 개념이다. 

더 새로운 HTTP/2 프로토콜은 동일한 개념을 사용하여 더 나아가 하나의 연결 복수의 동시 요청/응답을 다중화 하는것이 가능하다.

 

 

 

Http1.0 버전 발표 이후 클라이언트와 서버간의 요청과 응답을 어떻게 하면 좀 더 빨리 할 수 있을지에 대한 연구가 이루어 졌다. 대표적으로 Persistent Connection, Pipelining 기법이 Http1.x 시대에 이를 위해 만들어진 방법이다.

 

Http 통신을 통해 여러 오브젝트 요청 및 응답해야 하는 경우, Http 1.0 초기에는 요청때마다 TCP 연결을 3-way handshake 방식으로 맺어야 했다. 3-way handshake는 syn, syn-ack, ack 로 이루어 진다.

 

5개의 오브젝트를 가진 하나의 웹 페이지가 있다면 클라이언트와 서버 사이에는 5번의 3-way handshake과정을 통해 TCP 열결을 맺고 끊는 반복이 필요했던 것이다.

 

 

웹의 초창기에는 웹을 통해 전달해야 하는 사이트의 콘텐츠 수가 그리 많지 않았기 때문에 다수의 TCP 연결 사용으로 인한 부담은 그리 크지 않았으나, 웹 사이트의 콘텐츠(특히 이미지 등의 멀티미디어)가 늘어나면서 

TCP 연결의 재사용이 필요하게 되었다. 이때 나온 기술이 Persistent Connection 기술이다.(Keep-alive 혹은 connection re-use라는 표현도 사용)

 

 

 

Http1.0 기반에서 persistent connection(연결 지속)을 사용을 원하고, 이를 지원하는 클라이언트는 다음과 같이 서버에게 Http 요청 시, 요청 Message내 헤더에 다음 헤더를 추가 한다.

 

connection:keep-alive

 

persistent 커넥션을 지원하는 서버는 클라이언트의 요청을 수용하고 tcp 연결을 httpp 응답이후에 끊징낳고 계속 사용하겠다라는 약속으로 동일한 헤더를 Http 응답에 포함한다. 

 

Http 1.1에서는 굳이 Connection헤더를 사용하지 않더라도, 모든 요청과 응답은 기본적으로 Persistent connection을 지원하도록 되어서 필요 없을 경우에만 (Http 응답이 완료된 이후에 Tcp연결을 끊어야 하는 경우에만) 다음과 같이 Connection 헤더를 사용하였다.

 

 

모든 페이지에 PersistentConnection을 사용하면 서버의 자원이 고갈되기때문에 사용할지 말지 고려해 봐야함.

Persistent Connection을 사용하면 얻을 수 있는 장점은 서버의 단일 시간내 Tcp 연결의 수를 그만큼 적게 함으로서 섭의 cpu나 메모리 자원을 절약할 수 있고, 네트워크 혼잡이나 지연의 경우의 수를 줄일 수 있다.

또한 persistent connection는 복수개의 http 요청과 응답을 병렬적으로 동시에 처리하기 위한 Http pipelining 기술을 사용하기 위해서는 꼭 지원 되어야 한다.

 

Http/2 버전은 멀티 플랙싱기능으로 단일 TCP 연결을 통해 (Persistent Connection in Http1.x) 다수의 Http 요청과 응답(Http pipelining in Http 1.1)이 클라이언트와 서버 사이에 응답 지연(Hol : Header of line blocking)없이 stream 형태로 주고 받을 수 있는 기술적 토대를 만들게 되었다. 따라서 Http/2를 사용한다면 Persistent Connection에 대해 고민할 필요가 없어지게 된다. 

 

 

 

[참고 자료]

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

 

HTTP Persistent Connection

HTTP 요청과 응답 시, 다수의 TCP 연결을 줄이기 위한 방법 | HTTP1.0 버전 발표 이후, 클라이언트와 서버간 요청과 응답을 어떻게 하면 좀 더 빨리 할 수 있을지에 대한 연구가 이루어졌다. 대표적으로 Persistent Connection, Pipelining 기법이 HTTP1.X 시대에 이를 위해 만들어진 방법이다. HTTP 통신을 통해 여러 오브젝트를 요청 및 응답해야 하는 경우, HTTP1.0 초기에는 요

brunch.co.kr

https://ko.wikipedia.org/wiki/HTTP_%EC%A7%80%EC%86%8D%EC%A0%81_%EC%97%B0%EA%B2%B0_%EC%83%81%ED%83%9C

반응형

댓글