HTTP/2.0

2024. 11. 8. 16:33·Network

HTTP /2.0 - Binary Protocol

기존에 HTTP1.1 대 버전은 메시지 구성이 Plain Text(평문)을 사용하고, 개행으로 구별되었다.

HTTP 2.0 대에서는 메세지 구성이 바이너리 포멧으로 인코딩 된 Message, Frame으로 되어있다.

쉽게 말하자면 기존에 텍스트 기반으로 Header 와 Data가 연결되어 있었던 HTTP 1.1 대 버전들과 다르게 HTTP/2 는 메세지를 Binary 단위로 구성하고, 더 작은 프레임으로 쪼개서 관리한다.

HTTP/2 의 패킷들은 더 작은 단위로 압축이 되는데, 이때 Frame 과 Message, Stream 이라는 개념이 새롭게 도입된다.

  • Frame : HTTP/2 의 통신 최소 단위이다. 모든 패킷에는 하나의 Frame Header가 포함된다.
    → 이 프레임 헤더 내부에 프레임 식별자가 있어, 수신 측에서 응답 순서 상관없이 프레임을 받아도 순서대로 재배치 가능
  • Message : 논리적 요청 또는 응답 메시지에 매핑되는 프레임의 전체 시퀀스이다.
    → 프레임이 모여 메세지를 구성함
  • Stream : 하나 이상의 메시지가 전달 가능한 양방향의 데이터 흐름.
    →각 스트림에는 양방향 메시지를 전달하는 데 사용되는 고유 식별자와 선택적 우선 순위 정보가 있음

즉 HTTP/2 의 연결은 Binary Framing 통해 나온 이진 데이터를 헤더를 관리하는 HEADERS frame 과 DATA frame 나누어 관리 / 전송 할 수 있게 되었다.

→ 이 과정에서 허프만 코딩 압축 방식 을 기반으로하는 HPACK 압축 방식 이 사용되어, 중복되는 헤더와 데이터를 줄 일 수 있도록 함.

통신 구조 및 흐름

기존 HTTP/1.1 버전대에서는 텍스트 평문으로 요청을 한번에 보냈다고 하면, HTTP/2는 기존의 텍스트 평문을 해석 및 압축하여 매우 잘게 쪼갠 수 많은 프레임으로 통신을 한다고 생각하면된다.

이런 프레임들로 이루어진 메시지들을 스트림 방식을 사용해 양방향으로 데이터를 주고 받는다.

즉 프레임들로 구성된 메시지가 모여 스트림이라는 방식을 사용하는 통로로 이동하며 통신을 한다.

정리

HTTP2 에서는 스트림 하나가 다수개의 요청과 응답을 처리하는 구조로 바뀌었다.

→ 이는 한번에 여러개의 메세지를 처리 할 수 있도록 하였다.

따라서 응답 프레임들은 요청 순서에 상관없이 서버에서 만들어진대로 클라이언트에게 전달 될 수 있다.

→ 이로써 이전에 파이프라이닝 방식을 사용해 발생한 HeadOfBlocking 이슈를 해결 할 수 있다.

출처

https://velog.io/@cjh8746/HTTP-Keep-Alive-와-pipelining-그리고-Multiplexed-Streams을-공부하다가-알게된-버전열-HTTP0.9-2.0-정리

'Network' 카테고리의 다른 글

Forward Proxy, Reverse Proxy  (0) 2024.11.09
공개키? 개인키?  (0) 2024.11.08
Http 상태코드  (0) 2022.02.24
TCP 네트워킹(2)  (0) 2021.09.21
TCP 네트워킹(1)  (0) 2021.09.20
'Network' 카테고리의 다른 글
  • Forward Proxy, Reverse Proxy
  • 공개키? 개인키?
  • Http 상태코드
  • TCP 네트워킹(2)
사랑우주인
사랑우주인
  • 사랑우주인
    lovelyAlien
    사랑우주인
  • 전체
    오늘
    어제
  • 글쓰기
    관리
    • 분류 전체보기 (209)
      • Programming (4)
        • Spring (28)
        • Java (46)
        • JPA (2)
        • 디자인 패턴 (5)
        • 개발&아키텍처 (0)
      • Network (14)
      • OS (19)
      • Database (1)
      • Kubernetes (0)
      • Kafka (2)
      • Algorithm (49)
        • BaekJoon (1)
        • Programmers (19)
        • Algorithm (5)
        • Socar (2)
        • LeetCode (19)
      • Interview (2)
      • Issues (2)
      • DotJoin (1)
      • Git (4)
      • 독서 (3)
      • 끄적끄적 (1)
      • 외부활동 (26)
        • 항해플러스 (2)
        • JSCODE 네트워크 (19)
        • JSCODE 자바 (5)
      • SQL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • GitHub
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    algorithm
    @JsonProperty
    Thread
    wildcards
    Generic
    제네릭
    Process
    socar
    디자인 패턴
    rotting oranges
    JSCode
    @JsonNaming
    Oauth2
    pacific atlantic water flow
    clone graph
    fcfs
    LinkedList
    트랜잭션
    OS
    Climbing Stairs
    AuthenticationSuccessHandler
    minimum number of arrows to burst balloons
    lower bounded wildcards
    RR
    BFS
    운영체제
    추상화 클래스
    Reorder List
    준영속 엔티티
    runner 기법
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
사랑우주인
HTTP/2.0
상단으로

티스토리툴바