목차
들어가면서
HTTP Connection 기본 개념
HTTP/1.0 Connection
HTTP/1.1 Connection
마무리
참조
들어가면서
이번 글을 통해 HTTP Connection 기본 개념과 HTTP 버전별 동작 스펙을 정리해보겠다.
HTTP Connection 기본 개념
HTTP 에서는 Connection을 신경쓰지 않는다. Connection은 HTTP 보다 하위 레이어인 transport layer에서 관리된다.
HTTP는 꼭 connection-based인 transport protocol을 사용할 필요는 없다. 대신 신뢰성있는 protocol이면 된다. 쉽게 말하면 HTTP 메시지가 유실되지 않는 transport protocol이면 된다.
transport protocol에 가장 유명한 protocol은 TCP와 UDP가 있다. 그 중 TCP가 더 신뢰성이 있기 때문에 HTTP는 TCP 위에서 동작한다. 즉, TCP가 Connection을 담당한다.
(구글에서 HTTP를 위한 QUIC 이라는 transport protocol을 개발했다.)
HTTP/1.0 Connection
HTTP/1.0에서는 기본적으로 HTTP 요청 하나당 하나의 TCP Connection을 사용한다. 이는 비효율적이다. 이를 개선하기 위해 하나의 Connection 헤더를 이용해 하나의 TCP Connection을 이용해 여러 HTTP 요청을 보낼 수 있도록 개선하는 작업이 있었다. 하지만 HTTP/1.0 Proxy Server와의 하위 호환성 이슈로 문제가 완벽히 해결되진 않았다.
HTTP/1.1 Connection
HTTP/1.1에서는 HTTP/1.0의 실수를 만회하기 위해 하나의 TCP 연결에서 여러 HTTP 요청을 보내는 것을 기본 값으로 스펙이 변경되었다. 따라서 TCP 연결에 하나의 HTTP 요청을 보내고 싶다면, Connection 헤더에 "close" 값을 넣어줘야 한다. (RFC 2068)
HTTP/1.1에서는 추가로 Pipelining 등장했다. 이는 HTTP 요청을 보내고 응답이 오기전에 HTTP 요청을 보내는 것이다. 하지만 이는 호환성문제로 이슈가 있다. HTTP/2에서 이를 보완한 개념인 multiplexing으로 문제를 해결했다.
마무리
HTTP Connection에 대한 기본개념과 버전별 차이점에 대해 정리해보았다. HTTP 프로토콜을 사용해 개발할때 도움이되었으면 한다.
참조
'네트워크' 카테고리의 다른 글
SSE(Server Sent Event) 개념 정리 (0) | 2024.02.15 |
---|---|
HTTPS 적용 방법과 동작원리 (1) | 2023.07.14 |
WebSocket과 친해지기 (0) | 2023.05.30 |
REST API (0) | 2022.06.14 |