HTTP/2의 가장 큰 변화는 텍스트 기반 프로토콜이 아닌 바이너리 기반의 프로토콜이라는 점이다.
HTTP/2에서는 하나의 TCP 커넥션 안에 '스트림'이라는 '가상의 커넥션 개념'이 존재한다. 각 스트림은 고유하게 식별되는 ID 값이 존재하며 상태머신(열림/닫힘 등)도 존재한다.
HTTP/2는 '프레임' 단위로 통신을 한다. 즉, 프레임은 통신의 최소 단위다. 프레임은 다음과 정보를 담고 있다.
Length: Frame Payload의 크기Type: 프레임 종류 (하단 참고)Flags: 플래그 (PADDED, PRIORITY, END_STREAM 등..)R: 예약된 영역 (항상 0)Stream Identifier: 스트림 식별자 (같은 값이라면 같은 스트림의 프레임)Frame Payload: 프레임의 실제 데이터
주목해야할 것은 Stream Identifier 이다. HTTP/2는 TCP 커넥션내의 스트림이라는 가상 개념으로 구분되는데, Stream Identifier가 스트림의 식별자로 사용되기 때문이다. 즉, 같은 Stream Identifier인 프레임들은 수신시 스트림단위로 그룹화되며 '같은 스트림에서 진행되고 있는 프레임'으로 취급된다.