HTTP/2

홍준섭·2023년 1월 31일
0

네트워크

목록 보기
17/20

주요 목표

  • 줄어든 지연 시간
  • 응답 다중화 지원
  • HTTP 헤더 필드 압축 통한 프로토콜 오버헤드 최소화
  • 요청 별 우선순위 지정을 추가함
  • 서버 푸시
  • 기존 어플리케이션의 수정 없는 지원

binary framing layer

일반 텍스트를 사용하는 HTTP/1.x와 달리 HTTP/2는 더 작은 메시지와 프레임으로 분할되며, 바이너리 형식으로 인코딩 한다.

stream, message & frame

  • 모든 통신은 단일 tcp 연결을 통해 수행되며, 전달될 수 있는 양방향 스트림의 수는 제한이 없다.
  • 스트림: 구성된 연결 내에서 전달되는 바이트의 양방향 흐름이며, 하나 이상의 메시지가 전달될 수 있다. 각 스트림에는 양방향 메시지 전달에 사용되는 고유 식별자와 우선순위 정보가 있다.
  • 메시지: 논리적 요청 또는 응답 메시지에 매핑되는 프레임의 전체 시퀀스이다.
  • 프레임: HTTP/2에서 통신의 최소 단위이며 각 최소 단위에는 하나의 프레임 헤더가 포함된다. 이 프레임 헤더는 최소한으로 프레임이 속하는 스트림을 식별한다. 다른 스트림들의 프레임을 인터리빙한 다음, 각 프레임의 헤더에 삽입된 스트림 식별자를 통해 이 프레임을 다시 조립할 수 있다.

요청 및 응답 다중화

  • 전체 요청 및 응답 다중화를 지원
  • 클라이언트와 서버가 HTTP 메시지를 독립된 프레임으로 세분화하고, 이 프레임을 인터리빙한 다음, 다른 쪽에서 다시 조립함
  • HTTP/1.x에서 발생하는 Head of Line 차단 문제를 해결할 수 있고, 여러 개의 연결이 없이도 요청 및 응답의 병렬 처리와 전달을 지원할 수 있다. 따라서 더 빠르고 단순해지고 배포 비용이 절감된다.

스트림 우선 순위 지정

  • HTTP 메시지가 많은 개별 프레임으로 분할될 수 있고 여러 스트림의 프레임을 다중화하는 것이 가능해짐에 따라, 프레임이 클라이언트와 서버에 의해 인터리빙되고 전달되는 순서가 중요한 성능 고려사항이 되었다.
  • 이를 용이하게 하기 위해 HTTP/2 표준에서는 각 스트림이 연관된 가중치와 종속성을 갖도록 허용한다.
  • 스트림의 종속성 및 가중치 조합을 이용하여 클라이언트가 우선순위 지정 트리를 구성하고 통신할 수 있음
  • 스트림 종속성을 이용해 어느 것이 리스소를 먼저 할당 받을지 정한다. 같은 상위 요소를 공유하는 스트림은 그 가중치에 비례하여 리소스가 할당된다.
  • 클라이언트는 스트림 우선순위 지정을 사용하여 특성 순서로 스트림을 처리하도록 서버에게 강요할 수 없다.

One TCP connection per origin

  • HTTP/2의 단일 TCP 연결을 통한 client-server 통신
  • 연결 수가 적기 때문에 값비싼 TLS 핸드셰이크가 줄어들고, 세션 재사용이 더 향상되며, 필요한 클라이언트및 서버 리소스가 감소한다.

흐름제어

  • 클라이언트와 서버가 빌딩 블록을 사용하여 사용자설정 전략을 구현하여 리소스 사용과 할당을 제어한다.
  • 애플리케이션 계층 흐름 제어에서는 브라우저가 특정 리소스의 일부분만을 가져온 후, 스트림 흐름 제어 창을 0으로 줄여서 가져오기를 보류한 다음, 나중에 가져오기를 재개할 수 있도록 허용한다.
  • 흐름제어는 양방향이다.
  • 흐름제어는 크레딧 기반이다.
  • 흐름제어는 비활성화 될 수 없다.
  • 흐름 제어는 종단간 방식이 아니라 홉 방식이다.

서버푸시

  • 서버가 클라이언트가 요청하지 않아도 추가적인 리소스를 클라이언트에 푸시할 수 있다.
  • 현재는 잘 사용하지 않는다.

헤더 압축

  • 각 HTTP 전송은 전송된 리소스와 해당 속성을 설명하는 헤더 집합을 전송합니다.
  • HTTP/2에서 오버헤드를 줄이고 성능을 향상시키기 위해 HTTP/2는 HPACK 압축을 사용하여 요청 및 응답 헤더 메타데이터를 압축합니다
  • 하나의 스트림안에 있는 request와 response들은 독립적이지 않다 그렇기에 그 전에 보낸 것과 달라진 정보만 보내는 허프만 코드를 이용해 압축한다.
  • 두 개의 요청 헤더에 중복 값을 그냥 중복 전송했던 http/1.1과 다르게 http/2는 header table 개념을 사용하여 중복 헤더를 검출하고 중복된 헤더는 index값만 전송한다.

HTTP/2 HPACK의 두가지 Hearder Table 방식

  • Static table
    HTTP에서 중복되게 주고 받는 것들을 미리 테이블로 집어 넣은 것
  • Dynamic table
    기본적으로 통신을 하면서 업데이트 되는 정보를 집어 넣는다.
profile
개발 공부중입니다

0개의 댓글

관련 채용 정보