Study/HTTP

05. HTTP2.0

ABCD 2024. 4. 16.

HTTP 2.0

  • 주요목표
    • 전체 요청을 통해 지연 시간을 줄이기
    • 응답 다중화를 지원
    • HTTP헤더 필드의 효율적 압축을 통해 프로토콜 오버헤드를 최소화
    • 요청 우선순위 지정을 추가하며, 서버 푸시를 지원
    • 보안 강화
  • 주요 목표를 이루기 위해 다양한 보조 프로토콜을 개선
  • HTTP/2.0은 HTTP의 애플리케이션 의미 체계를 어떤 식으로도 수정하지 않는다.
  • 모든 핵심 개념(ex. HTTP메서드, 상태코드, URI 및 헤드 필드)은 그대로 유지된다.
  • But!! 클라이언트와 서버 간에 데이터 서식(프레임)이 지정되는 방식과 데이터가 전송되는 방식을 수정
  • 클라이언트와 서버는 전체 프로세스를 관리하며 애플리케이션의 모든 복잡성을 바이너리 프레이밍계층 내에 숨긴다.

바이너리 프레이밍 계층(Binary Framework)

  • 전송단위
    • Frame : HTTP/2.0에서 통신의 최소 단위, Header 또는 Data
    • Message : HTTP/1.1과 똑같은 오청 또는 응답의 최소 단위, 다수의 프레임으로 이루어져 있다.
    • Stream : 클라이언트와 서버가 맺은 연결을 통해 양방향으로 주고받는 하나 또는 여러개의 메시지들
    • 여러개의 프레임이 하나의 메시지를 이루고, 그 메시지들이 모여 하나의 스트림을 만든다.image 6

image 7

  • 이전 버전의 HTTP에서는 메시지(Message)를 전송하는 것이 기본 단위였다.
    • 메시지의 구조를 이해하기 쉽지만, 메시지의 크기가 커지면, 메시지의 구조 파악이 어려워지며, 메시지를 처리하는데도 많은 오버헤드가 발생하게 된다.
    • 메시지의 크기가 클 경우 TCP의 패킷 재전송 때문에 전송 속도가 느려지는 문제가 발생하기도 한다.
  • 바이너리 프레이밍 계층에서는 이와 같은 단점을 보완하기 위해, 프레임이라는 단위로 데이터를 나누어 전송
  • 프레임이라는 작은 단위로 나누어 전송하므로, 오버헤드를 최소화할 수 있다.
  • 프레임의 순서를 조합하여 메시지를 완성하므로, 메시지의 구조 파악이 쉽다.

멀티 플렉싱

image 8

 

image 9

  • 하나의 커넥션으로 동시에 여러개의 메시지를 주고 받을 수 있으며, 응답은 순서에 상관없이 처리되는 것
  • 요청, 응답은 뒤섞여 도착하게 되고, 뒤 섞인것이 도착한 곳(서버 or 클라이언트)에서 프레임을 재조립한다.
  • 바이너리 프레이밍과 멀티플렉싱을 사용하여 여러 요청과 응답을 병렬처리 할 수 있다.

Stream 우선순위 (Stream Prioritization)

image 10

  • HTTP 메시지가 많은 개별 프레임으로 분할될 수 있고 여러 스트림의 프레임을 멀티플렉싱 할 수 있게 되면서, 스트림들의 우선순위를 지정할 필요가 발생했다.
  • 우선순위를 지정하기 위해 ‘우선순위 지정 트리’를 사용하여 서버의 스트림처리 우선순위를 지정 할 수 있다.
  • 서버는 우선순위가 높은 응답이 클라이언트에 우선적으로 전달도리 수 있도록 대역폭을 설정한다.

헤더 압축

  • 원리
    image 11

image 12

  • HTTP/2.0의 Header 압축은 내부적으로 HPACK 이라고 불리는 Module이 담당하는데 HPACK은 Huffman Algorithm과 Static Table, Dynamic Table을 통해서 압축을 수행한다.
  • Huffman Algorithm : 자주 나오는 문자열 순서대로 짧은 Bitmap으로 Mapping하여 Data를 압축하는 기법
  • Static Table : HTTP/2.0 Spec에 정의된 Table로 HTTP/2.0 Header로 자주 사용되는 Key-value 값 쌍을 저장하고 있는 Table
  • Dynamic Table : 한번 전송/수신한 Header의 Key-value 값을 임의로 저장하는 Buffer 역할을 수행하는 Table
  • Static Header Table : 모든 연결에 사용될 가능성이 있는 공용 HTTP 헤더 필드를 제공
    • (ex.올바른 헤더 이름)
  • Dynamic Header Table : 처음에는 비어있으며, 특정 연결에서 교환되는 값에 따라 업데이트 된다.
  • 클라이언트가 두번의 요청을 보낼 때 HTTP/1.x는 두개의 요청 Header에 중복값이 존재해도 중복 전송한다.
  • HTTP/2.0은 중복값이 존재하는 경우 Static/Dynamic Header Table 개념을 사용하여 중복을 검출한다.
  • Header는 index값만 전송한다.
  • 중복되지 않은 Header정보의 값은 Huffman Encoding 기법으로 인코딩 처리하여 전송한다.

서버 푸쉬

image 13

  • HTTP/2.0 이전 버전은 HTML을 요청 후 응답받게 되는데, 그 후 내장되어 있는 JavaScript나 CSS파일 등을 추가로 요청하는 작업이 필요하다.
  • HTTP/2.0 이후 버전은 HTML을 요청 후 JavaScript, CSS 등이 존재할 경우 요청하지 않은 컨텐츠까지 같이 보내 줄 수 있다. 이로인해 전송에 필요한 RTT가 줄어 응답속도를 개선시켰다.
728x90
반응형

'Study > HTTP' 카테고리의 다른 글

07. StartRow&StatusCode  (0) 2024.04.16
0.6 URL escape String  (0) 2024.04.16
04. HTTP 1.1  (0) 2024.04.16
03. HTTP의 역사  (0) 2024.03.12
02.비연결성과 StateLess 프로토콜  (0) 2024.03.05

댓글