HTTP의 성능 문제를 개선하기 위해 HTTP/2.0이 등장하였다.
- HTTP/1.1의 메시지 포맷은 구현의 단순성과 접근성에 주안점을 두고 최적화되어, 성능적인 문제가 있었다.
- 커넥션 하나를 통해 요청 하나를 보내고 그에 대한 응답을 받아야만 그다음 요청을 보낼 수 있는 HTTP/1.1의 메시지 교환 방식은 심각한 회전 지연을 초래한다.
- 구글은 웹을 더 빠르게 하겠다는 목표 아래 SPDY 프로토콜을 내놓았고, 이는 성능 개선 효과를 보여 해당 프로토콜 초안을 기반으로 HTTP/2.0 초안이 만들어지게 되었다.
HTTP/2.0의 특징
- 서버와 클라이언트 사이의 TCP 커넥션 위에서 동작한다. 이때 TCP 커넥션을 초기화하는 것은 클라이언트다.
- HTTP/2.0 요청과 응답은 길이가 정의된(최대 16383바이트) 한 개 이상의 프레임에 담긴다.
- 프레임에 담긴 요청과 응답은 스트림을 통해 보내지고 한 개의 스트림이 한 쌍의 요청과 응답을 처리한다.
- 하나의 커넥션 위에 여러 개의 스트림이 동시에 만들어질 수 있으며, 스트림에 대한 흐름 제어와 우선순위 부여 기능도 제공된다.
- 새로운 상호작용 모델인 서버 푸시를 통해 서버는 클라이언트에게 필요하다고 생각하는 리소스라면 요청을 받지 않더라도 클라이언트에게 보내줄 수 있다.
- HTTP/2.0은 요청과 응답 메시지의 의미를 HTTP/1.1과 같도록 유지하고 있으나 이를 표현하는 문법은 변경되었다.
프레임
HTTP/2.0에서 모든 메시지는 프레임에 담겨 전송된다.

모든 프레임은 8바이트 크기의 헤더로 시작하며 뒤이어 최대 16383바이트 크기의 페이로드가 온다.
HTTP/2.0은 총 10가지 프레임을 정의하고 있으며, 페이로드의 형식이나 내용은 프레임의 종류에 따라 다르다.
스트림과 멀티플렉싱
스트림 : HTTP/2.0 커넥션을 통해 클라이언트와 서버 사이에서 교환되는 프레임들의 독립된 양방향 시퀀스.
한 쌍의 HTTP 요청과 응답은 하나의 스트림을 통해 이루어진다.
하나의 TCP 커넥션에 여러 개의 스트림이 동시에 열릴 수 있어 회전 지연 문제를 해결한다.