HTTP1.1

HTTP1.1은 기본적으로 연결당 하나의 요청과 응답을 처리하게됩니다. 다만 이경우 다수의 리소스를 처리하기에는 성능이슈가 발생하게 되죠.

그 구체적인 예시가 HOL Blocking입니다. 특정 응답을 지연한다는 뜻으로, HTTP1.1의 사양상제한으로 인해 클라이언트의 리퀘스트순서와 서버의 응답순서에 대한 동기화 과정으로 발생하는 지연이죠.

또한, HTTP1.1은 헤더에 지나치게 많은 메타정보를 포함합니다. 이경우 중복 요청일 경우 불필요한 헤더값을 중복전송하게 되어 지연이 발생합니다.

이를 해결하기 위해 이미지 스프라이트방법 (이미지를 하나로 합쳐 좌표값으로 리턴)이나 도메인샤딩(리소스를 여러개의 도메인으로 나누어저장)등 다양한 방법을 통해 프론트엔드단에서의 노력이 있어왔습니다.

하지만 HTTP1.1의 구조적 한계점을 개선할 순 없었죠.

그리고 HTTP2.0이 등장하게 됩니다.

HTTP2.0

HTTP2.0의 특징은 다음과 같습니다.

  1. 멀티플렉스 스트림 : 한 커넥션에 여러개의 메세지를 동시에 주고받을 수 있습니다.
  2. 요청이 커넥션 상에서 다중화 되므로 HOL블락킹문제가 발생하지 않습니다.
  3. Stream Prioritization : 요청리소스간 의존관계를 설정합니다.
  4. Header Compression : 헤더를 HPACK압축방식을 통해 압축전송합니다.
  5. HTTP1.1과 높은 수준의 호환성 : 메소드, 상태코드, URI및 헤더필드
  6. 페이지 로딩속도를 향상하였습니다.

정리

정리하자면 기존의 HTTP1.1은 클리아언트의 Request와 서버의 Response간의 동기화과정으로 인해 많은 부하가 발생했습니다. 이외에도, 헤더의 크기로 인해 트래픽이 몰릴 경우 성능저하가 빈번했습니다.

반면 HTTP2.0은 요청을 커넥션 상에서 다중화하여, HOL블라킹문제를 해결하였습니다. 또한, 멀티플렉스드 스트림방식을 적용하여 하나의 커넥션에 여러개의 메세지를 주고받을 수 있도록 했습니다. 이외에도 헤더데이터를 압축전송하는 방식을 통해 기존 HTTP1.1보다 높은 속도를 보여줍니다.