HTTP Evolution

HTTP 의미는 유지되고 전송 방식이 진화했다

HTTP/1.1은 텍스트 메시지를 TCP 연결에 싣고, HTTP/2는 하나의 TCP 연결에서 프레임을 멀티플렉싱합니다. HTTP/3는 QUIC 스트림을 사용해 TCP 연결 단위 HOL Blocking을 줄입니다.

Semantics: 메서드, 상태 코드, 필드, 콘텐츠 의미
Mapping: HTTP/1.1, HTTP/2, HTTP/3가 실제 전송하는 방식
HTTP/3도 같은 스트림 내부 순서 대기는 남습니다.
HTTP/1.0

요청마다 연결

매 요청마다 새 TCP 연결을 여는 모델이라 반복 요청 비용이 큽니다.

TCPopen
REQ1개
RESP1개
TCPclose
반복비용 큼
HTTP/1.1

연결 재사용

Keep-Alive로 연결을 재사용합니다. 파이프라이닝은 있었지만 실무 채택은 제한적이었습니다.

TCPopen
REQ1순서
RESP1순서
REQ2재사용
RESP2재사용
HTTP/2

프레임 멀티플렉싱

하나의 TCP 연결에서 여러 스트림을 섞어 보냅니다. TCP 계층 손실은 연결 전체에 영향을 줄 수 있습니다.

HEADA
DATAB
DATAA
HEADC
TCPHOL 가능
HTTP/3

QUIC 스트림

UDP 위 QUIC 연결에서 스트림별 전송을 제공합니다. 한 스트림 손실이 다른 스트림 진행을 막지 않습니다.

QUICUDP
Astream
Bstream
TLS1.3
0-RTT재연결

HTTP/2 서버 푸시는 표준 기능이지만 예측 실패와 캐시 상태 때문에 효과적으로 쓰기 어렵습니다. 그래서 “버전이 높으면 항상 빠르다”보다 병목이 연결, 헤더, HOL, 서버 처리 중 어디인지 보는 편이 정확합니다.