HTTP (4) - 버전별 차이점

김지승·2025년 4월 26일

CS

목록 보기
11/22

웹의 근간이 되는 HTTP(Hypertext Transfer Protocol)는 웹 브라우저와 서버 간의 통신을 가능하게 하는 핵심 프로토콜입니다. 초기 웹이 등장한 이후로 HTTP는 지속적인 발전을 거쳐왔으며, 각 버전마다 중요한 개선점을 도입했습니다. 이 글에서는 HTTP의 주요 버전별 차이점과 발전 과정을 자세히 살펴보겠습니다.

HTTP/0.9 - 단순한 시작

현대적인 HTTP 이전에 존재했던 초기 버전으로, 1991년에 등장했습니다.

주요 특징:

  • 단일 라인 프로토콜이었으며, GET 메서드만 지원
  • 헤더가 없었고 HTML 파일만 전송 가능
  • 각 연결 후 즉시 종료됨
  • 상태 코드 없음
GET /index.html

HTTP/1.0 - 기본 기능의 도입

1996년에 발표된 HTTP/1.0은 웹의 급속한 성장을 지원하기 위한 기본 기능들을 도입했습니다.

주요 특징:

  • 다양한 메서드 지원 (GET, POST, HEAD)
  • 헤더 개념 도입으로 메타데이터 전송 가능
  • 상태 코드 도입으로 응답 결과 구분 가능
  • Content-Type 헤더를 통해 다양한 파일 형식 전송 가능
  • 연결 방식: 요청마다 새로운 TCP 연결 생성 및 종료 (비효율적)
  • Keep-Alive: 비표준이지만 연결 유지를 위한 옵션 제공 (Connection: Keep-Alive)
GET /index.html HTTP/1.0
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)

한계점:

  • 요청마다 TCP 연결을 새로 수립하여 성능 저하
  • 헤더 중복 전송으로 대역폭 낭비
  • 병렬 연결 제한으로 리소스 로딩이 느림

HTTP/1.1 - 표준의 완성

1997년에 등장한 HTTP/1.1은 오랜 기간 웹의 표준으로 자리 잡았으며, 현재까지도 널리 사용되고 있습니다.

주요 특징:

  • 영속적 연결(Persistent Connection): 기본적으로 Keep-Alive 활성화로 여러 요청에 동일한 연결 재사용
  • 파이프라이닝(Pipelining): 응답을 기다리지 않고 여러 요청 전송 가능 (하지만 HOL(Head-of-Line) 블로킹 문제 존재)
  • Host 헤더 필수화: 가상 호스팅 지원으로 하나의 IP에 여러 도메인 호스팅 가능
  • Chunked Transfer Encoding: 전체 크기를 모르는 컨텐츠를 청크 단위로 전송 가능
  • 추가 메서드 지원 (PUT, DELETE, OPTIONS, TRACE 등)
  • 캐시 제어 메커니즘 개선
  • 압축 지원 (Content-Encoding)
  • 범위 요청 지원 (Range header)

한계점:

  • HOL(Head-of-Line) 블로킹: 하나의 TCP 연결에서 앞선 요청이 지연되면 뒤의 모든 요청이 영향을 받음
  • 헤더 크기가 계속 증가하면서 불필요한 대역폭 사용
  • 복잡한 웹 애플리케이션에서의 성능 제한

HTTP/2.0 - 성능의 혁신

2015년에 표준화된 HTTP/2.0은 구글의 SPDY 프로토콜을 기반으로 개발되어 성능을 크게 향상시켰습니다.

주요 특징:

  • 바이너리 프로토콜: 텍스트가 아닌 바이너리 형식으로 인코딩하여 파싱 효율성 증가
  • 멀티플렉싱(Multiplexing): 하나의 TCP 연결에서 여러 요청/응답 스트림을 병렬 처리, HOL 블로킹 해결
  • 헤더 압축(HPACK): 헤더 정보를 효율적으로 압축하여 중복 전송 방지
  • 서버 푸시(Server Push): 클라이언트가 요청하기 전에 필요한 리소스를 미리 전송
  • 스트림 우선순위: 중요한 리소스에 더 높은 우선순위 부여 가능
  • 흐름 제어(Flow Control) 기능 제공

장점:

  • 페이지 로딩 시간 감소 (평균 50% 이상)
  • 대역폭 사용 효율성 증가
  • 지연 시간 감소

한계점:

  • TCP의 특성으로 인한 패킷 손실 시 모든 스트림이 영향을 받음
  • TLS 구현이 사실상 필수적이며 설정이 복잡해짐

HTTP/3.0 - 트랜스포트 레이어의 혁신

2022년에 표준화된 HTTP/3는 구글이 개발한 QUIC 프로토콜을 기반으로 하여 트랜스포트 레이어부터 재설계했습니다.

주요 특징:

  • QUIC 프로토콜 기반: TCP 대신 UDP를 사용하면서 TCP의 장점은 유지
  • 연결 설정 시간 단축: 0-RTT 또는 1-RTT로 연결 수립
  • 독립적인 스트림 처리: 패킷 손실이 발생해도 다른 스트림에 영향 없음 (진정한 HOL 블로킹 해결)
  • 연결 마이그레이션: 네트워크 변경(예: Wi-Fi에서 셀룰러로)시에도 연결 유지
  • 개선된 혼잡 제어: 네트워크 상황에 더 효율적으로 대응
  • 내장된 암호화: 모든 통신이 TLS 1.3으로 암호화됨

장점:

  • 모바일 환경에서 특히 뛰어난 성능 (네트워크 전환이 빈번한 환경)
  • 패킷 손실에 강인한 성능
  • 연결 설정 레이턴시 감소

한계점:

  • 방화벽과 미들웨어 호환성 문제 (일부 네트워크에서 UDP 차단)
  • 복잡한 구현과 디버깅
  • 서버 리소스 사용량 증가

HTTP 버전별 비교표

특징HTTP/1.0HTTP/1.1HTTP/2.0HTTP/3.0
릴리스 연도1996년1997년2015년2022년
연결 방식비지속적 연결지속적 연결(Keep-Alive)단일 연결 멀티플렉싱QUIC 기반 멀티플렉싱
트랜스포트TCPTCPTCPUDP(QUIC)
헤더 압축없음없음HPACKQPACK
서버 푸시불가능불가능지원지원
HOL 블로킹심각함존재함부분 해결완전 해결
암호화선택적선택적권장필수
통신 형태텍스트텍스트바이너리바이너리

참고 문헌 및 리소스:

  • HTTP: The Definitive Guide (O'Reilly)
  • RFC 7540 - HTTP/2
  • RFC 9114 - HTTP/3
  • Web Performance in Action (Manning Publications)
profile
디등

0개의 댓글