10년넘게 유지되던 HTTP1.1 의 장벽을 깨뜨린 장본인
HTTP 2.0 은 국제 인터넷 표준화 기구(IETF)에서 2015년 정식 발표한 HTTP/1.1 의 차기 버전이다.
텍스트 위주의 전송 프로토콜인 HTTP/1.1
이 웹기술의 발전으로 인한 고용량 멀티미디어 데이터 전송량 증대에 따라가지 못하며, 후술할 여러 문제점들에 대한 근본적인 해결책을 제시하지 못하자, Google 이 개발한 SPDY
를 기반으로 HTTP 2를 발표하게 되었다.
많은 서비스들이 이러한 HTTP 1.1 의 단점을 극복하고자, Image Spriting, Domain Sharding, Data URI Scheme 등을 적용하였지만, 전술하였듯이 근본적인 해결책이 되지는 못하였다.
그 와중, Google 이 더 빠른 웹을 위해, throughput(처리량) 이 아닌 latency(지연율) 관점에서 HTTP 를 고속화한 SPDY 라는 새로운 프로토콜을 구현하였다.
TLS (SSL 의 차기버전) 과 HTTP 사이에서 동작하는 프로토콜이다.
SPDY 프로토콜은 HTTP 대처하는것이 아닌, HTTP 전송을 재정의 하는방식으로 구현되었다.
즉, Converter 라고 보면 편하다.
2015년 5월 14일, 이러한 HTTP 1.1 의 문제점과 SPDY 의 등장을 계기로, IETF 에서 SPDY를 기반으로 한 HTTP 2.0 프로토콜을 발표하였다.
이렇게 개발돤 HTTP 2.0 은 다음과 같은 목표를 두고 개발되었다.
HTTP 2 장점
에서 나온다.Connection 내에서 Client 와 Server 간의 데이터 전달 흐름을 의미한다.
하나의 스트림에서는 하나 이상의 메세지가 전달될 수 있다.
요청/응답에 매핑되는 프레임의 집합을 의미한다.
HTTP 2.0 에서의 최소 통신단위 로, 하나의 프레임 헤더가 포함된다.
프레임 해더는 프레임이 속하는 스트림을 최소한의 자원으로 식별할 수 있게 한다.
또한 Frame 내에는 실제 요청이나 응답에 대한 파편화된 정보들 이 기록되어있다.
Stream
의 수는 제한이 없다 (하나의 Connection, 하나 또는 여러개의 Stream)Stream
에는 양방향 메세지 전달에 사용되는 고유식별자와 우선순위 정보가 있다.Message
는 하나의 논리적 HTTP 메세지 (요청, 응답 등) 이며, 하나 이상의 Frame
으로 구성된다. (하나의 Message, 하나 또는 여러개의 Frame)Frame
은 통신의 최소단위이며 특적 유형의 데이터(헤더, 메시지 Payload = Body 등) 를 전달한다. 각기 다른 Stream
들에 프레임을 끼워넣고, 각 프레임의 헤더에 삽입된 식별자로 Frame 을 조립한다.기존에 설명하였던 Frame
은 text 가 아닌 binary 로 전송된다.
따라서, 파싱 및 전송속도가 높아지고, 오류 발생 가능성이 낮아진다.
하나의 Stream
마다 각기다른 Frame
(프레임이 속한 메세지 또한 다를 수 있다) 을 조합하여 전송한다.
각 Stream
에서, 요청 순서와 관계없이 Frame
을 조합하므로 HTTP 1.1 Pipeline 방식과는 다르게, 요청 순서대로 응답을 보낼 필요가 사라진다.
즉, Head On Line Blocking 에 대한 근본적인 해결책이 된다
HTTP 1.1 과는 달리, 하나의 HTTP 메세지(요청, 응답 등)가 많은 개별 프레임으로 나뉘어, 여러 스트림에 나뉘어 보내짐에 따라, 요청/응답의 처리 순서를 지정하기가 어려워지게 되었다.
따라서 이를 해결하기위해, 1부터 256까지의 Stream Prioritization 값을 설정하여, 어떤 요청이 더욱 빨리 처이해야하는지를 알려줄 수 있다.
하지만, HTTP 1.1 과는 다르게, 우선순위에 따라 순차적으로 처리하는것이 아닌, 우선순위에 따라 자원의 할당을 다르게 하여, 처리 성능을 향상시키는 방식으로 진행된다.
PC 에서 자원을 덜먹는 브라우저가 자원을 많이먹는 중량IDE 보다 자원을 덜 할당하는 방식을 떠올리면 된다
즉, 우선순위가 높다고 해서, 무조건적으로 빨리 처리되는것이 아니다. 처리해야할 양이 다를 수 있기 떄문이다.
서버가 클라이언트의 요청과 관계없이, 단일 Client 에게 리소스를 전송(Push)할 수 있다.
(단일 Client 라 표현한 이유 : notice 가 아닌 direct message 라고 생각하면 편하다)
이를 통해 클라이언트의 요청을 미리 예측하여 응답을 보낼 수 있다
예를들어,
HTTP 2.0에서는 Header 중복 문제를 해결하기 위해, Header 를 압축하여 전송한다.
이때, Header 의 압축에서는 HPACK 즉 허프만 인코딩 방식으로 압축한다