HTTP/2는 SPDY 프로토콜에서 파생된 HTTP/1.X 보다 지연시간을 줄이고 응답시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜입니다.
멀티플렉싱 (Multiplexing):
https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https://blog.kakaocdn.net/dn/1NU7W/btrkB5oAUYk/mI1ODCLNv0KHY3kjokRGv0/img.png
HTTP/2는 Multiplexed Streams를 이용하여 Connection 한 개로 동시에 여러 개의 메시지를 주고 받을 수 있으며 응답은 순서에 상관없이 Stream으로 주고 받습니다. RTT 시간이 줄어들어 별도의 최적화 과정이나 도메인 샤딩없이 웹 사이트 로드 속도가 빨라집니다. HTTP/1.1의 Connection Keep-Alive, Pipelining이 개선된 것을 알 수 있습니다.
https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https://blog.kakaocdn.net/dn/nN1MG/btrkIjrQxV2/oMCvbYtn8zo8V8QNamVOSK/img.jpg
헤더 압축 (Header Compression):
HTTP/2에서는 헤더 필드를 효율적으로 압축하여 대역폭을 절약합니다. HTTP/1.x에서는 헤더 필드가 반복되어 전송되는 경우가 많았는데, 이를 압축함으로써 네트워크 사용량을 줄이고 응답 시간을 개선할 수 있습니다.
HTTP/2는 중복 헤더 프레임을 압축해서 전송합니다. HPACK 규격을 사용하는데요. 클라이언트와 서버에서 모두 이전 요청에 사용된 헤더 목록을 유지관리합니다. HPACK은 서버로 전송되기 전에 각 헤더의 개별 값을 압축한 다음 이전에 전송된 헤더 값 목록에서 인코딩된 정보를 조회하여 전체 헤더 정보를 재구성합니다.
이전 Header의 내용과 중복되는 필드를 재전송 하지 않도록 하여, 데이터를 절약한다. 또한 기존에 HTTP Header가 Plain Text(평문)이었지만, HTTP/2에서는 Huffman Coding을 사용하는 HPACK이라는 Header 압축방식을 이용하여 데이터 전송 효율을 높였다.
서버 푸시 (Server Push):
https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https://blog.kakaocdn.net/dn/cJMaVo/btrkB4XTkpA/b7BiLHMlTw1GsUqWCk3DCk/img.png