2015년 IETF에 의해 공식적으로 발표된 HTTP/1.1의 차기 버전
기반
-
SPDY라는 구글의 비표준 개방형 네트워크 프로토콜에 기반
-
평문을 사용하고 개행으로 구분되던 HTTP/1.x에서와 달리 2.0에서는 바이너리 포맷으로 인코딩된 Message, Frame으로 구성된다.
-
http 2.0.png -
Stream: 구성된 연결내에서 바이트의 양방향 흐름, 하나 이상의 메세지가 전달가능하다
-
Message: 논리적 요청 또는 응답 메세지에 매핑되는 프레임의 전체 시퀀스
-
Frame: HTTP/2에서 통신의 최소 단위, 각 최소 단위에는 하나의 프레임 헤더가 포함된다. 이 프레임 헤더는 최소한으로 프레임이 속하는 스트림을 식별한다.
대표적 특징들
1. HTTP Header Data Compression(HTTP 헤더 데이터 압축)
Header의 내용과 중복되는 필드를 재전송 하지 않도록 하여, 데이터를 절약한다. 또한 기존에 HTTP Header가 Plain Text(평문)이었지만, HTTP/2에서는 [Huffman Coding](Huffman Coding은 높은 빈도로 존재하는 문자에 작은 비트를 주는 방식으로 압축한다.)을 사용하는 HPACK이라는 Header 압축방식을 이용하여 데이터 전송 효율을 높였다.

2. Server Push
클라이언트가 요청하지 않은 JS, CSS, Font, 이미지 파일등과 같이 필요하게 될 특정 파일들을 서버에서 단일 HTTP 요청 응답시 함께 전송될 수 있음
3. HTTP 1.x의 HOL(Head of Line) Blocking 문제 해결
- HTTP/1.1까지는 한번에 하나의 파일만 전송이 가능
- 여러 파일 전송시 선행 파일의 전송이 늦어지면, 전체 파일 전송의 시간이 늘어나는 문제 발생
- HTTP/2에서는 여러 파일을 한번에 병렬 전송하며 이런 문제 해결 HOL Blocking: 컴퓨터 네트워크에서 패킷 대기열이 존재할 때 앞선 패킷이 지연될 때 발생하는 성능 저하 TCP 연결 하나로 여러 요청, 응답들을 병렬적으로 보낼 수 있음
4. Stream 우선 순위
- 여러 스트림의 프레임을 다중화 할 수 있게 되면서, 스트림들의 우선순위를 지정할 필요생김
- 클라이언트는 우선순위 지정 트리를 사용해, 서버의 스트림처리 우선순위를 지정할 수 있음
- 서버는 우선순위가 높은 응답이 클라이언트에 우선적으로 전달될 수 있도록 대역폭 설정 가능