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 이슈를 해결 할 수 있다.
출처
'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 |