최소 지원 브라우저 버전 

 

 

 

 

Overview

 

  • HTTP/2 프로토콜은 클라이언트와 서버간 연결(on the wire)에서 HTTP 어떻게 표현되는지로 대체됨
  • 프로토콜의 초점은 성능
    -
    사용자(end-user) 지연시간(latency) 네트워크와 서버 자원의 사용을 감지
  • connection 맺으면 최대한 길게 사용할 것을 권고

    연결 수가 적다는 것은 HTTPS 배포의 성능을 개선하는데 특히 중요. 연결 수가 적으면 비용이 많이 발생하는 TLS 핸드셰이크가 줄어들고, 세션 재사용이 향상되며, 필요한 클라이언트 서버 리소스가 감소

  • 서버가 HTTP2 프로토콜을 지원할 경우 101 switching protocol 응답 받으며 연결되며, 지원하지 않을 경우 연결하기 위한 특정 header(Connection and Upgrade) 무시하고 HTTP 1.x 프로토콜로 FALL BACK 해야 한다.



Stream, Message, Frame

- http2의 기본 구성 요소는 Stream, Message, Frame 이다.

 

 

 

  • 스트림: 구성된 연결 내에서 전달되는 바이트의 양방향 흐름이며, 하나 이상의 메시지가 전달될 있다.
  • 메시지: 논리적 요청 또는 응답 메시지에 매핑되는 프레임의 전체 시퀀스
  • 프레임: HTTP/2에서 통신의 최소 단위이며 최소 단위에는 최소 하나의 프레임 헤더가 포함된다. 프레임 헤더는 최소한 프레임을 통해 스트림을 식별한다.


Binary Framing

Http Header와 Body가 Headers Frame, DATA frame으로 변경

 

- Frame은 String 데이터가 Binary로 Framing 된다. 프로토콜은 다음과 같다.

 

 

 

Protocol 

 

  • 모든 프레임은 9 바이트 헤더로 시작한다.(Length + type + flags)
  • Length :  payload 길이를 나타내고 unsigned 24bit integer이다. 수신자가 SETTINGS_MAX_FRAME_SIZE에서 2^14(16,384)보다 값을 설정하지 않았다면 이보다 값이 보내질 없다.
  • Type : 프레임의 형식
  • Flags : 8 비트, 특정 유형의 bool flag. 플래그들은 프래임의 타입에 따라 의미가 달라진다. 특정 프레임 타입에서 의미가 없는 플래그는 무시되어야 하고, 돌려 보낼떄 0으로 unset되어 보내져야한다.
  • R: 1비트 항상 0으로 예약된다.
  • Stream Identifier : 스트림의 식별자

 

Type 

DATA(0) - Used to transport HTTP message bodies

HEADERS(1) - Used to communicate header fields for a stream

PRIORITY(2) - Used to communicate sender-advised priority of a stream

RST_STREAM(3) - Used to signal termination of a stream

SETTINGS(4) - Used to communicate configuration parameters for the connection

PUSH_PROMISE(5) - Used to signal a promise to serve the referenced resource

PING(6) - Used to measure the roundtrip time and perform "liveness" checks

GOAWAY(7) - Used to inform the peer to stop creating streams for current connection

WINDOW_UPDATE(8) - Used to implement flow stream and connection flow control : 흐름 제어

CONTINUATION(9) - Used to continue a sequence of header block fragments

 

 

 

 

 

 

 

 

 

 

Http2는 이외에도 Server push, multiplexing 스트림 우선순위 지정 등 눈여겨 봐야 할 여러가지 특징이 있다. 결론적으로 http2는 http의 느리고 header packet의 중복 전송 등의 단점을 극복할 수 있는 프로토콜이다. 만일 리소스가 많지 않은 서버의 경우 http2는 비효율적일 수 있다. 

 

 

http2 기반 서버 / 클라이언트 구현 예제 샘플 : https://github.com/chulman/netty-http2

 

 

 

 

https://tools.ietf.org/html/rfc7540

 

RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)

[Docs] [txt|pdf] [draft-ietf-http...] [Tracker] [Diff1] [Diff2] [IPR] [Errata] PROPOSED STANDARD Errata Exist Internet Engineering Task Force (IETF) M. Belshe Request for Comments: 7540 BitGo Category: Standards Track R. Peon ISSN: 2070-1721 Google, Inc M.

tools.ietf.org

https://developers.google.com/web/fundamentals/performance/http2/?hl=ko

 

HTTP/2 소개  |  Web Fundamentals  |  Google Developers

HTTP/2(또는 h2)는 푸시, 다중화 스트림 및 프레임 제어를 웹에 구현하는 바이너리 프로토콜입니다.

developers.google.com

 

'Architecture & Protocol' 카테고리의 다른 글

12 요소 애플리케이션 방법론  (0) 2019.02.21
Websocket Protocol 분석  (0) 2019.01.28
서비스 지향 아키텍쳐(SOA)  (0) 2018.12.30
마이크로서비스 아키텍처(MSA)  (0) 2018.12.02

+ Recent posts