HTTP 0.x (0.9)
초기 버전: 1991년 도입된 HTTP/0.9는 웹의 태동기 프로토콜이다.
특징
- 텍스트 전송만 지원: HTML 파일 전송에만 사용, 이미지나 다른 파일 포맷 전송 불가. (응답도 HTML 파일 자체만 보내줌)
- 헤더 없음: 요청 및 응답에 메타데이터가 없고 단순한 GET 요청만 지원. (HTTP 헤더 X, 상태 코드 X)
- 비상태적: 연결이 단순히 요청-응답 후 종료. (서버와 클라이언트 간의 연결은 모든 요청 후에 닫힘)
- 비보안: 보안에 대한 고려가 없었음.
한계
- 기능이 매우 제한적.
- 확장성과 효율성이 부족.
HTTP 1.0
HTTP 포맷 형태의 시초 - 1996년 공식화.
특징
- 헤더 도입: 클라이언트와 서버가 메타데이터를 교환 가능.
- 다양한 요청/응답 코드 지원: 상태 코드 및 MIME 타입 지원.
- 이미지, 동영상 등 멀티미디어 전송 가능.
- 비상태적 연결: 여전히 요청-응답 후 연결을 종료.
- 캐싱 지원: 캐시 제어를 통해 리소스 재사용 가능.
한계
- 단기커넥션 : connection 하나당 1 Request & 1 Response 처리 가능
- 요청마다 새 연결을 열고 닫아야 하므로 비효율적.
- 성능이 제한적(멀티 요청 처리에 약함).
웹 페이지를 요청할 때, html과 그에 딸린 css나 js 및 이미지 등등 수 많은 자원들이 다운로드되어 화면에 띄울 텐데,
각 자원들을 따로 따로 매번 TCP 연결하고 다운받고 연결 끊고 다시 연결하고 다운 받고 연결 끊는 것 - 느리다.
HTTP 1.1
도입: 1997년 공식화.
특징
- 지속 연결(Persistent Connection): 지정한 timeout 동안 연속적인 요청 사이에 커넥션을 닫지 않음. 기존 연결에 대해서 handshake 생략 O
- 파이프라이닝(Pipelining): 이전 요청에 대한 응답이 완전히 전송되기 전에 다음 전송을 가능. 요청을 순차적으로 보내면서 응답 대기 시간을 단축.
- 호스트 헤더 도입: 가상 호스팅 지원, 같은 IP에서 여러 도메인 운영 가능.
- 캐싱 및 압축 개선: 효율적인 데이터 전송.
- Chunked Transfer Encoding: 전송 중 데이터 크기를 알 수 없을 때 부분적으로 전송 가능.
한계
- 파이프라이닝은 브라우저와 서버 구현 문제로 널리 사용되지 않음.
- HOL(Head-of-Line) Blocking: 한 요청의 지연이 다른 요청에도 영향을 미침.
HTTP/2
도입: 2015년 공식화.
특징
- 멀티플렉싱(Multiplexing): 하나의 커넥션으로 동시에 여러개의 메세지 스트림을 응답 순서에 상관없이 주고 받는 것
- 이진 프레임(Binary Framing): 텍스트 대신 바이너리 데이터 전송으로 효율성 향상.
- 헤더 압축(HPACK): 헤더 크기를 줄여 네트워크 비용 절감.
- 서버 푸시(Server Push): 클라이언트 요청 전에 리소스를 미리 전송.
- 지속 연결: HOL Blocking 문제를 어느 정도 해결.
- 보안 강화: TLS(HTTPS)를 요구하지는 않지만 사실상 HTTPS와 함께 사용됨.
한계
- 멀티플렉싱을 지원하지 않는 네트워크 환경에서는 여전히 HOL Blocking 문제 발생.
- 더 복잡한 프로토콜 구현 필요.
HTTP/3
도입: 2020년 초안 발표, 2022년 표준화.
특징
- QUIC 기반: TCP 대신 UDP 기반 QUIC(Quick UDP Internet Connections) 프로토콜 사용.
- 진정한 HOL Blocking 해결: 각 요청이 독립적으로 처리.
- 빠른 연결 수립: 1-RTT 또는 0-RTT 핸드셰이크로 지연 시간 감소.
- 내장 암호화: QUIC 자체에서 보안(TLS 1.3) 제공.
- 패킷 손실 시 회복력 강화: 연결 재설정 없이 손실된 패킷만 재전송.
- 모바일 환경 최적화: 네트워크 변화에 빠르게 적응.
단점
- QUIC 및 UDP 기반이라 초기 서버와 네트워크 지원이 제한적일 수 있음.
비교 표
버전 | 도입 연도 | 주요 특징 | 한계 |
HTTP 0.9 | 1991 | 텍스트 전송, 헤더 없음, GET 요청만 지원 | 매우 단순, 비효율적 |
HTTP 1.0 | 1996 | 멀티미디어 지원, 상태 코드 도입, 캐싱 지원 | 요청마다 새 연결 필요, 성능 제한 |
HTTP 1.1 | 1997 | 지속 연결, 파이프라이닝, 가상 호스트 지원, 캐싱 및 압축 개선 |
HOL Blocking 문제 |
HTTP/2 | 2015 | 멀티플렉싱, 이진 프레임, 헤더 압축, 서버 푸시 | 네트워크 제약에서 여전히 HOL Blocking 문제 발생 |
HTTP/3 | 2022 | QUIC 기반, HOL Blocking 해결, 빠른 연결, 내장 암호화, 모바일 환경 최적화 |
초기 네트워크 및 서버 지원 필요 |
HTTP 버전 선택 고려 사항
- 최신 시스템에서는 HTTP/2 또는 HTTP/3를 사용하여 효율성과 보안을 극대화.
- HTTP/1.1은 여전히 널리 사용되며, 과거 서버나 클라이언트와의 호환성 유지.
- HTTP/3는 대규모 시스템에서 성능 이점을 제공하며 미래 지향적.
'Network' 카테고리의 다른 글
[Network] DNS (0) | 2024.12.03 |
---|---|
[Network] HTTP와 HTTPS (0) | 2024.11.27 |
[Network] Stateful vs Stateless (2) | 2024.11.24 |
[Network] 프로토콜과 OSI 7 Layer (0) | 2024.11.24 |
[Network] 멱등성이란? (0) | 2024.11.24 |