
목차
📌 HTTP/0.9 (1991년) – 최초의 HTTP
- 설명: 최초로 개발된 HTTP 버전으로, 매우 단순한 프로토콜
- 주요 특징
- 텍스트 기반 (HTML 파일만 전송 가능)
- 요청 메서드:
GET
만 지원 - 헤더 없음
- 비연결형(Connectionless) → 요청 후 바로 연결 종료
- 한계점
- HTML 외의 리소스(CSS, 이미지, JS 등) 전송 불가능
- 상태 코드(Status Code) 미지원
- 매 요청마다 새로운 연결을 생성해야 함
📌 HTTP/1.0 (1996년, RFC 1945) – 최초의 공식 표준
- 설명: 처음으로 공식적으로 표준화된 HTTP 버전
- 주요 특징
- 요청 메서드 추가:
GET
,POST
,HEAD
지원 - 응답 헤더 도입:
Content-Type
,Content-Length
등 - 캐싱(Caching) 지원 (
Expires
헤더 추가) - Host 헤더 도입 (가상 호스팅 지원)
- 요청 메서드 추가:
- 한계점
- 기본적으로 비연결형(Connectionless) → 요청마다 새로운 TCP 연결 생성
- 다수의 리소스 요청 시 느린 성능
- 브라우저가 여러 개의 연결을 사용하여 성능을 개선하려고 했지만, 네트워크 자원을 비효율적으로 사용
📌 HTTP/1.1 (1997년, RFC 2616) – 현재까지 널리 사용
- 설명: 성능 최적화와 기능 확장이 이루어진 버전으로, 현재까지도 많이 사용됨
- 주요 특징
- 지속적 연결(Persistent Connection) 지원 → 하나의 연결을 재사용하여 성능 개선
- 파이프라이닝(Pipelining) 지원 → 여러 요청을 한 번에 전송 가능 (단, 응답 순서가 정해져 있음)
- Chunked Transfer Encoding 지원 → 큰 데이터를 여러 개의 청크(chunk)로 나누어 전송 가능
- Host 헤더 필수화 → 여러 도메인을 같은 IP에서 처리 가능
- 캐싱 및 압축 개선 (
ETag
,Cache-Control
,Gzip
지원)
- 한계점
- 파이프라이닝 문제: 하나의 요청이 지연되면 이후 요청들도 지연되는 ‘Head-of-line blocking’ 발생
- 연결을 유지하지만 여전히 직렬 요청 방식이라 다수의 리소스를 요청하면 속도가 느려짐
📌 HTTP/2 (2015년, RFC 7540) – 성능 대폭 개선
- 설명: 웹 성능 개선을 위해 구글의 SPDY 프로토콜을 기반으로 개발됨
- 주요 특징
- 이진 프레이밍(Binary Framing Layer) 사용 → 텍스트 기반이 아닌 이진(Binary) 기반으로 데이터 전송
- 멀티플렉싱(Multiplexing) 지원 → 하나의 TCP 연결에서 여러 요청을 동시에 처리 가능 →
Head-of-line blocking
완화 - 헤더 압축(HPACK) 지원 → HTTP 헤더 크기를 줄여 네트워크 대역폭 절감
- 서버 푸시(Server Push) 지원 → 클라이언트가 요청하지 않은 리소스를 서버가 미리 전송 가능
- 한계점
- 여전히 TCP 기반이므로, 네트워크 혼잡 시 성능 저하 발생
- 일부 오래된 시스템에서는 지원하지 않을 수도 있음
📌 HTTP/3 (2022년, RFC 9114) – 최신 버전, QUIC 기반
- 설명: 기존 HTTP/2의 한계를 해결하기 위해 UDP 기반 QUIC 프로토콜을 사용한 HTTP 버전
- 주요 특징
- TCP 대신 QUIC(UDP 기반) 사용 → 연결 설정 속도 향상
- 0-RTT(Zero Round Trip Time) 지원 → 이전 연결이 있다면 핸드셰이크 없이 즉시 데이터 전송 가능
- Head-of-line blocking 완전 해결 → 패킷 손실이 발생해도 다른 스트림이 영향을 받지 않음
- 보안 강화: 기본적으로 TLS 1.3 적용
- 한계점
- 일부 방화벽 및 프록시 서버와의 호환성 문제
- 아직 HTTP/3을 지원하지 않는 서버나 네트워크 환경 존재
📌 HTTP 버전별 상세 비교표
버전 | 출시 연도 | 주요 특징 | 연결 방식 | 성능 개선 | 주요 한계점 |
---|---|---|---|---|---|
HTTP/0.9 | 1991년 | GET 만 지원, 헤더 없음 |
단일 요청 후 연결 종료 | 없음 | HTML 외 리소스 요청 불가 |
HTTP/1.0 | 1996년 | GET , POST , HEAD 추가, Host 헤더 지원 |
요청마다 새로운 TCP 연결 | 제한적 | 다수 리소스 요청 시 속도 저하 |
HTTP/1.1 | 1997년 | 지속적 연결, Chunked Transfer Encoding , Pipelining |
연결 재사용 가능 | 일부 개선 | Head-of-line blocking 문제 |
HTTP/2 | 2015년 | 멀티플렉싱, 서버 푸시, 헤더 압축(HPACK) | 하나의 TCP 연결에서 다중 요청 가능 | 성능 대폭 개선 | TCP 기반으로 인한 지연 |
HTTP/3 | 2022년 | UDP 기반 QUIC, 0-RTT 지원, TLS 1.3 기본 적용 | 빠른 연결, 병렬 처리 가능 | 가장 큰 성능 향상 | 방화벽, 프록시와의 호환성 문제 가능 |
📌 결론
- HTTP/1.1은 여전히 많이 사용되지만,
Head-of-line blocking
등의 문제로 성능이 제한적 - HTTP/2는 멀티플렉싱과 서버 푸시 기능 덕분에 속도가 크게 개선되었지만 TCP 기반이라 한계 존재
- HTTP/3는 QUIC을 사용하여 기존 문제를 해결하고 속도와 보안을 크게 개선했지만, 아직 완전한 대중화 단계는 아님
최신 웹 애플리케이션 개발 시 HTTP/3을 고려하는 것이 가장 좋으며, 현재 HTTP/2가 널리 사용되는 표준입니다. 🚀