Post

Understanding HTTP Versions: From 0.9 to 3.0

HTTP(HyperText Transfer Protocol)

HTTP(HyperText Transfer Protocol)는 웹 상에서 클라이언트와 서버 간에 데이터를 주고받기 위한 프로토콜이다. HTTP는 여러 버전을 거쳐 발전해왔으며, 각 버전은 성능 향상과 보안, 효율성 개선 등을 목적으로 다양한 변경 사항을 포함한다.

오늘날 쓰이고 있는 HTTP 프로토콜은 버전이 여러 가지다. 따라서 여러가지의 버전을 호환 가능하도록 애플리케이션을 잘 작성해야한다. 이를 위해서는 각 HTTP의 버전에 대한 특징 및 한계를 잘 파악해두는 것이 좋다. 아래는 HTTP 각 버전에 대한 상세 설명이다.


HTTP/0.9 (1991년)

1991년의 HTTP 프로토타입은 HTTP/0.9로 알려져 있다. 이 프로토콜은 심각한 디자인 결함이 다수 있다. GET 메서드만 지원하고, 멀티미디어 콘텐츠에 대한 MIME 타입이나, HTTP 헤처, 버전 번호는 지원하지 않는다. HTTP/0.9는 원래 간단한 HTML 객체를 받아오기 위해서 만들어진 것이다. 따라서 HTTP/0.9는 금방 HTTP/1.0으로 대체되었다.

특징

  • 최초의 HTTP 버전.
  • 매우 단순한 구조로, GET 메서드만 지원.
  • 헤더 없음, 상태 코드 없음.
  • HTML 문서만 전송 가능 (텍스트만).
  • 요청 예시: GET /index.html

제한점

  • 이미지, 스타일시트, 스크립트 등을 전송할 수 없음.
  • 응답에 메타 정보(콘텐츠 유형 등) 없음.
  • 확장성 부족.

HTTP/1.0 (1996년)

1.0은 처음으로 널리 쓰이기 시작한 HTTP 버전이다. HTTP/1.0은 버전 번호, HTTP 헤더, 추가 메서드, 멀티미디어 객체 처리를 추가했다. HTTP/1.0은 시각적으로 매력적인(?) 웹페이지와 상호작용하는 폼을 실현했고, 이는 WWW(World Wide Web)을 대세로 만들었다.

특징

  • 헤더상태 코드 도입 (예: 200 OK, 404 Not Found).
  • 다양한 HTTP 메서드 지원: GET, POST, HEAD.
  • 콘텐츠 유형(MIME 타입) 지정 가능 (Content-Type 헤더).
  • 각 요청마다 새로운 TCP 연결을 생성.

장점

  • 비텍스트 데이터(이미지, 오디오 등)도 전송 가능.
  • 기본적인 웹 기능 완성.

단점

  • 비효율적인 연결 방식: 요청마다 TCP 연결을 맺고 끊어야 함 → 성능 저하

HTTP/1.0+ (1.0 with extensions)

1990년대 중반, 월드 와이드 웹이 급격히 팽창하고 상업적으로도 성공하면서 등장한 1.0의 확장이다. 표준화된 공식 HTTP 버전은 아니지만, HTTP/1.0에 일부 확장 기능이 추가된 비공식적인 과도기적 형태이다. 유명 웹 클라이언트와 서버들은 이러한 발전에 따른 요구를 만족시키기 위해 발 빠르게 HTTP에 기능을 추가해갔다. 오래 지속되는 “keep-alive” 커넥션, 가상 호스팅 지원, 프록시 연결 지원을 포함해 많은 기능이 공식적이지는 않지만 사실상의 표준으로 HTTP에 추가되었다.


HTTP/1.1 (1997년, 현재도 많이 사용됨)

HTTP/1.1은 HTTP 설계의 구조적 결함 교정, 두드러진 성능 최적화, 잘못된 기능 제거에 집중했다. 뿐만 아니라 HTTP/1.1은 더 복잡해진 웹 애플리케이션과 배포를 지원한다.

특징

  • Persistent Connection (keep-alive): 여러 요청을 하나의 TCP 연결로 처리.
  • 파이프라이닝(Pipelining) 지원: 요청을 순차적으로 보내고 응답을 기다림.
  • Host 헤더 필수: 가상 호스팅 지원.
  • 캐시 제어, 압축, 청크 전송 인코딩(Chunked Transfer-Encoding) 등 기능 추가.

장점

  • 성능 개선 (TCP 연결 재활용).
  • 다양한 기능 확장으로 유연성 향상.

단점

  • 파이프라이닝은 순차 응답 방식 → 헤드 오브 라인 블로킹(Head-of-line blocking) 문제 존재.
  • 하나의 커넥션에서 병렬 처리 어려움.

HTTP/2 (2015년, RFC 7540)

HTTP 2.0은 Hypertext Transfer Protocol version 2, 즉 HTTP의 두 번째 주요 버전으로, 웹 성능 향상과 효율적인 네트워크 통신을 위해 2015년에 표준화되었다. 기존 HTTP/1.1의 한계점을 해결하고, 웹 애플리케이션의 응답 속도를 높이는 데 목적이 있다.

주요 특징

  • 바이너리 프로토콜: 텍스트 기반이 아닌 바이너리로 데이터 처리 → 파싱 성능 향상.
  • 멀티플렉싱(Multiplexing): 하나의 연결로 여러 요청/응답을 병렬 처리 → HOLB 문제 해결.
  • 헤더 압축 (HPACK): 중복된 헤더 정보를 효율적으로 압축.
  • 서버 푸시(Server Push): 서버가 클라이언트의 요청 없이도 자원 전송 가능.

장점

  • 페이지 로딩 속도 개선.
  • 리소스 낭비 감소.
  • 보안 측면에서 대부분 TLS(HTTPS)와 함께 사용됨.

단점

  • 바이너리 포맷이라 디버깅이 어려움.
  • HTTP/1.1과 하위 호환되지만 서버와 클라이언트 모두 업그레이드 필요.

HTTP/3 (2022년, RFC 9114)

HTTP/3.0은 최신의 HTTP 프로토콜 버전으로, 기존 HTTP/2의 근본적인 한계를 해결하기 위해 설계되었다. 특히 TCP 대신 UDP 기반의 새로운 전송 프로토콜인 QUIC(Quick UDP Internet Connections) 을 사용한다는 점에서 매우 혁신적이다. QUIC는 Google이 개발한 전송 계층 프로토콜로, UDP 기반에서 TCP + TLS 기능을 통합한 구조이다.

주요 특징

  • TCP → QUIC(UDP 기반): 연결 성립 속도 빠름, 손실 복구 개선.
  • 0-RTT 연결 가능: 이전 연결을 기반으로 즉시 데이터 전송 가능.
  • 멀티플렉싱 개선: 패킷 손실 시에도 다른 스트림에 영향 없음.
  • 기본적으로 TLS 1.3 내장 → 보안성과 성능 동시 확보.

장점

  • 모바일 환경에 강함 (네트워크 변경 시도 빠른 복구).
  • 전송 지연 감소, 스트리밍과 대용량 전송에 적합.

단점

  • UDP 기반이라 네트워크 장비나 방화벽에서의 호환성 이슈 존재 가능.
  • 상대적으로 구현 복잡도 높음.

버전 비교

버전연결 방식병렬 처리주요 기능전송 프로토콜
HTTP/0.9비연결형×단순 GET, HTML 전송만TCP
HTTP/1.0비연결형×상태 코드, 헤더, MIME 타입TCP
HTTP/1.1지속 연결제한적Keep-alive, 캐시, Host, 파이프라이닝TCP
HTTP/2지속 연결멀티플렉싱, 서버 푸시, 헤더 압축TCP (TLS 권장)
HTTP/3지속 연결QUIC, 0-RTT, 빠른 재연결UDP (QUIC)

결론

HTTP/1.1은 여전히 많이 사용되며, 기능은 풍부하나 성능 한계 존재한다. 현시점에서는 호환성이 가장 강력하므로 고성능이 요구되지 않은 일반적인 애플리케이션을 구현할 때는 HTTP/1.1로도 충분하다. HTTP/2는 병렬 처리와 성능 개선이 되었으며, 특히 웹 페이지 로딩 속도에 큰 도움을 줄 수 있다. HTTP/3은 고성능이 요구되는 서비스에 적합하다. 예를 들면, 모바일·스트리밍 환경에서 탁월하다. 최신 웹에서 점차 확대 중이다.

This post is licensed under CC BY 4.0 by the author.