1. HTTP/2.0이란?

Hypertext Transfer Protocol Version 2 / SPDY에 기반한다.

RFC2616은 발표된 이례 인터넷이 성장하는 바탕이 되었지만 점점 실시간에 가까운 응답속도를 요구하는 등 시대가 변함에 따라 대대적인 수정이 필요하게 됨.


2. 목표

요청과 응답 멀티플렉싱을 통하여 레이턴시를 줄이고, HTTP header필드를 압축하여 프로토콜 오버헤드를 최소화하며, 요청 우선순위와 서버푸시기능을 지원하는 것.


3. HTTP/2.0에서 새로 나온 개념

frame은 HTTP/2.0 통신에서 사용되는 가장 작은 단위이다.

frame 2개가 합쳐지면 stream이다. 예) header frame + data frame => 하나의 stream

header에는 HTTP 상태코드, 버전, 서버 등의 정보가 있고, 

data에는 소스가 있다.


4. HTTP/2.0에서의 header 압축 방법

4-1. 중복제거

HTTP/2.0에서는 중복전송하지 않는 방식으로 header를 압축한다. HTTP/1.1에서는 요청에 중복된 필드가 있더라도 다시 중복데이터를 보낸다. 하지만, HTTP/2.0에서는 중복되는 필드를 제외하고 전송한다.

-> 같은 요청을 폴링하는 경우는 헤더가 변한게 없으므로 헤더 오버헤드는 0바이트.

4-2. Huffman coding 방식으로 또한번 압축 진행

1952년 발표된 알고리즘이다.

압축 알고리즘 : 무손실 압축, 손실 압축

HTTP Header 압축을 위해선 무손실 압축 -> Entropy encoding 방식을 사용하는 것이 좋다. Entropy encoding 방식의 대표적 방식은 Huffman coding / Arithmetic coding(산술부호화) / Range encoding(범위부호화)이다. Arithmetic coding, Range encoding은 비슷함. Arithmetic coding은 Huffman보다 압축률이 좋다는 특징이 있으나(하지만, 단문의 메시지일 경우 압축률이 더 떨어질 수 있음) 연산량이 크기 때문에 시간이 오래 걸린다.

HTTP/2.0에서 압축을 하는 이유는 전송시 비용을 줄이기 위함! 그렇기 때문에 압축시 시간이 오래 걸리는 알고리즘 보다는 속도, 크기적으로 효율성이 좋은 Huffman을 선택했을듯. 


5. 웹사이트에서 HTTP/2.0(혹은 SPDY)을 지원하는지 확인하고 싶다면?

크롬 웹스토어에서 HTTP/2 and SPDY indicator 통해서 확인한다. 설치 후 브라우저 우측 상단에 번개 모양이 생기는데 파란색이면 HTTP/2 지원, 빨간색이면 SPDY 지원, 둘다 아니면 둘다 지원하지 않는 것.


6. gRPC

구글에서 개발하였으며 구글 내외부 시스템 및 여러 엔드포인트 간의 통신을 위해 사용되는 오픈 소스 RPC 프레임워크이다.

이 gRPC는 HTTP/2 기반으로 통신한다. HTTP/2가 양방향 스트리밍이 가능하기 떄문에 서버와 클라이언트가 서로 데이터를 스트리밍 방식으로 주고 받을 수 있는 것이다.

또 HTTP/2는 헤더 압축률이 좋다. 더욱이 HTTP/2에 의한 압축뿐 아니라 protoBuf에 의해 메시지 크기가 확 줄어든다. 이에 따라 네트워크 트래픽이 줄어들고 그래서 사용 리소스가 줄어들고 성능이 좋아진다.