Post

HTTP/1.1과 HTTP/2 비교하기

HTTP/1.1의 단점

HOL(Head Of Line) Blocking

HTTP/1.1은 기본적으로 커넥션 당 하나의 요청을 처리한다.

이러한 단점을 개선할 수 있는 기법으로 Pipelining이 있다.

Pipelining은 한 번의 커넥션으로 다수의 request와 response를 처리하는 방식이다.

하지만 순차적으로 앞의 response 처리가 완료되기 전까지 대기한 후 response를 보내기 때문에 많은 리소스를 요청하거나 리소스의 용량이 큰 경우 대기 시간이 오래 걸릴 수 있다.

이러한 현상을 HOL(Head Of Line) Blocking 이라고 한다.

RTT(Round Trip Time) 증가

HTTP는 TCP 기반 프로토콜이기 때문에 커넥션이 될 때마다 3-way Handshake가 반복적으로 일어나 성능 저하 및 RTT가 증가한다.

Header 중복 전송

매 요청시 마다 중복된 헤더값을 전송하게 되며 cookie 정보도 매번 헤더에 포함되므로 헤더의 용량이 커진다.

HTTP/2의 장점

Multiplexing

HTTP/2는 한 커넥션으로 멀티플렉싱 stream을 주고 받아 동시에 여러개의 메세지를 전송할 수 있다.

또한 독립적으로 처리되기 때문에 HOL Blocking이 발생하지 않는다.

stream : 전달되는 바이트의 양방향 흐름이며, 여러개의 메시지가 전달될 수 있다.

Binary Protocol

HTTP 메시지를 binary 형태의 프레임으로 나누고 이를 클라이언트 측에서 다시 조립한다.

텍스트가 아닌 binary로 구성하므로 파싱이 더 빠르다.

Stream Prioritization

서버에서 리소스 간의 우선순위를 지정하여 응답함으로써 사이트 렌더링을 최적화할 수 있다.

우선순위에 대한 내용은 이 글 참고

Server Push

Server push 기법으로 클라이언트가 요청하지 않아도 문서에 포함된 리소스를 미리 푸시한다.

예를 들어 클라이언트가 page.html을 요청했을 때, 서버는 index.js, index.css를 요청할 것이라 예측하고 Push한다.

서버가 전송한 리소스에 대해 클라이언트는 재요청을 할 필요가 없으므로 request를 최소화할 수 있다.

Header Compression

HTTP/2는 Header Table과 Huffman Encoding 기법을 사용하여 중복 요청되는 헤더를 검출한다.

중복된 헤더는 index 값만 전송하고 중복되지 않은 헤더 값은 Huffman Encoding 기법(HPACK)으로 압축하여 전송한다.

참고사이트

나만 모르고 있던 - HTTP/2
HTTP/2 훑어보고 AWS에서 적용해보기
HTTP/2 알아보기 - 1편

This post is licensed under CC BY 4.0 by the author.