최소 지원 브라우저 버전
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
- 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
ㅇhttps://developers.google.com/web/fundamentals/performance/http2/?hl=ko
'Architecture & Protocol' 카테고리의 다른 글
12 요소 애플리케이션 방법론 (0) | 2019.02.21 |
---|---|
Websocket Protocol 분석 (0) | 2019.01.28 |
서비스 지향 아키텍쳐(SOA) (0) | 2018.12.30 |
마이크로서비스 아키텍처(MSA) (0) | 2018.12.02 |