HTTP 1.1 까지는 한번에 하나의 파일만 전송이 가능했다. 파일 전송이 늦어지면 Head Of Line Blocking 이 발생했다. 따라서 Http 2.0에서는 이 문제를 해결하기 위해 여러 파일을 한번에 병렬로 전송한다.

그래서 일반적으로 HTTP/2를 사용만해도 웹 응답 속도가 HTTP/1.1에 비해 15~50% 향상 된다고 한다.
HTTP/2.0의 원조는 구글이 만든 새로운 프로토콜인 2009년 중반에 발표된 SPDY(스피디) 이다.
HTTP/1.1의 메시지 포맷은 구현의 단순성과 접근성에 주안점을 두고 최적화 된 프로토콜이다 보니 성능은 어느정도 희생시키지 않을 수 없었다. 때문에 더 효율적이고 빠른 HTTP가 필요했고


HTTP/1.1에서는 HTTP 요청과 응답은 통짜 텍스트 Message 단위로 구성되어 있었다.
HTTP/2 로 오면서 Message라는 단위외 Frame, Stream 이라는 단위가 추가되었다.
Frame: HTTP/2에서 통신의 최소 단위이며, Header 혹은 Data가 들어있다.
Message: HTTP/1.1과 마찬가지로 요청 혹은 응답의 단위이며 다수의 Frame으로 이루어진 배열 라인
Stream: 연결된 Connection 내에서 양방향으로 Message를 주고 받는 하나의 흐름
즉, HTTP/2 는 HTTP 요청을 여러개의 Frame들로 나누고, 이 frame들이 모여 요청/응답 Message가 되고, 그리
고 Message는 특정 Stream에 속하게 되고, 여러개의 Stream은 하나의 Connection에 속하게 되는 구조이다.

Multiplexing

HTTP 2.0 통신과정
하나의 커넥션에서 여러 개의 스트림이 동시에 요청/응답한다.
HTTP/2 Graming Layer를 통해서 TCP 커넥션 낭비가 없고 병렬적으로 자원이 전송받기에 매우 빠르다.
HTTP 2.0 + Push 통신 과정
클라이언트가 따로 요청하지 않아도, 서버가 알아서 미리 자원들을 클라이언트에 보낸다.
Stream Prioritization 리소스간 의존관계를 설정 하여 문제 해결
Head Of Line Blocking HTTP 1.1에서 파이프라이닝 이라는 기술이 있었지만 우선순위 때문에 다른것들이 대기를 타는것을 말함
HTTP Header Data Compression
HTTP 2.0 문제점
TCP 사용하므로 Round Trip Time 패킷 왕복 시간이 존재
HTTP 3.0 은 TCP 대신 UDP를 사용했고
QUIC라는 프로토콜을 새로 만들었다.