HTTP 버전별 특징 정리
CS

HTTP 버전별 특징 정리

HTTP 버전별 등장 연도


HTTP 0.9 (1991년)

  • HTTP의 초기 버전
  • 요청 메시지가 단일 라인으로 구성되고 GET 메서드만 사용 가능
  • 요청 및 응답 헤더가 없고 HTML 문서만 전송 가능
  • 응답 메시지에 상태 코드가 없고 문서 파일 자체만 전송

HTTP 1.0 (1996년)

  • GET, POST, HEAD 메서드 사용 가능
  • 메타데이터를 나타내는 헤더가 메시지에 추가됨.
  • Content-Type 헤더를 사용해서 HTML외에 다른 형식의 데이터도 전송 가능
  • 요청 메시지에 프로토콜 버전과 메서드를 포함
  • 응답에 상태 코드가 추가됨.
  • 요청을 보낼 때 마다 매번 TCP 연결을 새로 설정해야하는 단점 존재

HTTP 1.1 (1997년)

HTTP 1.1의 특징

  • Keep-Alive 기능을 통해 일정 시간 또는 횟수 동안 연결을 닫지않고 유지
    • Persistent Connection 이라고도 한다.
    • 연속된 요청에 대해 이미 설정된 연결을 재사용
    • 반복되는 핸드쉐이크 과정을 줄여 응답 속도를 개선
  • 파이프라이닝(Pipelining)으로 하나의 연결 안에서 여러 개의 요청과 응답을 처리
    • 한 번에 모든 요청을 순차적으로 전송하고, 순차적으로 응답을 받음.
    • 다음 요청을 보내기 위해 이전 요청의 응답을 기다리지 않음. 
    • 단, 요청 순서대로 응답을 보내기 때문에 앞 응답이 지연되면 나머지 응답도 지연됨. (동기)
  • 더 많은 메서드와 상태 코드 추가

HTTP 2 (2015년)

스트림 단위로 요청과 응답을 전송하는 멀티플렉싱

  • 바이너리 프로토콜(Binary Protocol)을 사용하여 데이터 전송 속도 향상
    • 평문으로된 메시지를 이진(바이너리) 형식으로 인코딩
    • 이진화된 프레임 단위로 메시지를 분할하여 전송
    • 메시지가 헤더 프레임, 데이터 프레임으로 나뉜다.
  • 멀티플렉싱(Multiflexing)으로 하나의 연결 안에서 여러 응답과 요청을 동시에 처리
    • 스트림(Stream)을 생성하여 요청과 응답 메시지(프레임)를 전송함.
    • 스트림은 서버와 클라이언트 사이의 양방향 통신 채널을 의미함.
    • 서버와 클라이언트는 각각 다수의 스트림을 만들어서 병렬적으로 요청과 응답을 전송 (비동기)
    • 즉, 하나의 연결은 스트림으로 구성되고, 스트림은 프레임으로 구성된다.
  • 서버 푸시 기능을 통해 하나의 요청에 대해서 추가적인 리소스(다수의 응답) 전송 가능
  • 헤더 압축을 통해 헤더 필드 중복을 방지하여 데이터 전송 속도 향상
  • 우선 순위를 지정한 요청 스트림에 대해 응답을 우선적으로 받을 수 있음.

HTTP 버전별 요청, 응답 전송 과정


HTTP 3 (2019년)

HTTP/2는 TCP 기반, HTTP/3는 UDP를 사용하는 QUIC 기반

  • 이전 버전의 문제점을 개선하고 QUIC를 기반으로 하는 HTTP 3 등장
  • QUIC(Quick UDP Internet Connections)는 구글에서 개발한 UDP 기반의 프로토콜
  • QUIC는 TCP 및 SSL/TLS위에 UDP를 사용해 안정성, 보안성, 전송 속도을 높인다.
  • QUIC는 단순화된 TCP 핸드쉐이크와 빠른 패킷 복구 기능을 가짐.

참고 문서

HTTP 버전별 특징

keep-alive와 파이프라이닝

HTTP 2.0 특징

http 버전별 특징 정리

'CS' 카테고리의 다른 글

URL의 구성 요소와 웹 통신 과정  (0) 2023.03.16
HTTP 메시지와 구성 요소  (0) 2023.03.01
HTTP vs HTTPS (feat. 대칭키, 공개키)  (0) 2023.02.28
TCP vs UDP  (0) 2023.02.26
OSI 7계층에 대하여  (0) 2023.02.24