HTTP 버전 정리

📌 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가 널리 사용되는 표준입니다. 🚀

Leave a Comment