[Web] HTTP 1.1과 2.0의 차이, HTTP 1.0 vs HTTP 1.1 vs HTTP 2.0

HTTP 1.0과 HTTP 1.1의 차이

HTTP 1.0과 HTTP 1.1의 가장 큰 차이점은 역시 Keep-alive 기능이다. 

HTTP 1.0은 매 요청마다 TCP 세션을 맺어야 했지만 1.1은 한 번의 TCP 세션으로 여러 개의 요청을 날릴 수 있다.

 

좀 더 자세한 내용은 다음을 참고하자.

 

 

[Web] HTTP 1.0 과 HTTP 1.1의 차이

HTTP란? HTTP(Hyper Text Transfer Protocol)는 인터넷에서 주로 사용하는 데이터를 송수신하기 위한 프로토콜이다. HTTP에 대한 자세한 내용은 다음을 참고하자. [네트워크] HTTP란? non-persistent HTTP vs persistent

code-lab1.tistory.com

 

 

HTTP 1.1의 문제점

HTTP 1.1에서는 pipelining 을 통해 하나의 TCP 세션에 여러 HTTP 요청을 보낼 수 있었다.

 

하지만 이러한  HTTP 1.1 에는 아래와 같은 문제들이 발생한다.

 

HOL Blocking

HOL Blocking
[그림 1] HOL Blocking

 

HOL Blocking 이란 Head Of Line Blocking, 즉 줄의 맨 앞이 막히는 경우를 생각하면 된다.

여러 개의 요청을 보내더라도 맨 앞의 요청이 막히면 뒤의 요청도 지연되는 것을 HOL Blocking 이라고 한다.

 

무거운 Header

HTTP 1.1은 하나의 TCP 세션에 여러 HTTP 요청을 보낼 수 있지만, 이때  매번 중복되는 헤더 값을 전송한다. 따라서 반복적인 헤더 전송으로 인한 비효율이 발생한다.

 

 

HTTP 2.0의 등장

HTTP 2.0은 HTTP 1.0의 문제점을 아래와 같은 방법들로 개선하였다.

 

 

멀티플렉싱(Multiplexing)

HTTP 2.0 멀티플렉싱
[그림 2] 멀티플렉싱 (출처 : 참고1)

 

HTTP 1.1은 하나의 요청 처리 이후 다른 요청을 처리했다. 하지만 HTTP 2.0은 한 번에 여러개의 스트림(stream)을 전송해 데이터 요청 처리 순서에 상관없이 빠르게 처리된 결괏값을 먼저 받을 수 있다. 이를 통해 HOL Blocking 문제를 해결했다.

 

HTTP 2.0은 데이터를 여러개의 스트림(Stream)으로 쪼갠다. 이 스트림은 또 여러 개의 메시지(Message)로 쪼개진다. 또한 이 메시지는 여러 개의 이진 프레임(binary-encoded frame)으로 쪼개진다. 여러 개의 이진 프레임들은 어떤 스트림에 속해있는지 태그가 붙는다. 

 

이 태그 덕분에 서버 측에서 여러 프레임을 순서 상관없이 받더라도 하나의 스트림으로 재조립(reassemble)이 가능하다.

 

그렇기 때문에 HOL Blocking이 발생하지 않고 병렬적으로 메시지를 주고 받을 수 있게 되는 것이다. 이를 멀티플렉싱(Multiplexing)이라고 한다.

 

 

서버 푸쉬(Server Push)

HTTP 2.0 서버 푸쉬(Server Push)
[그림 3] 서버 푸쉬

 

일반적으로 서버는 클라이언트가 요청한 콘텐츠만을 보여준다. 하지만 이러한 방식은 현대 웹 페이지에는 실용적이지 않다. HTTP 2.0은 서버 푸쉬(Server Push)를 통해 이러한 문제를 해결한다. 

 

서버 푸쉬는 클라이언트가 요청하지 않았음에도 서버가 콘텐츠를 푸쉬(push), 즉 제공해주는 것을 뜻한다. 

 

예를 들어 [그림 3]처럼, 클라이언트가 html을 요청했을 때 서버 푸쉬가 없다면 css 파일도 따로 요청하고 받아야 한다.

하지만 서버 푸쉬가 가능하다면 클라이언트가 html을 요청했을때 서버가 html 뿐만 아니라 css 파일도 푸쉬(Push) 해줄 수 있다. 이를 통해 성능을 개선할 수 있다.

 

 

헤더 압축(Header Compression)

HTTP 2.0 헤더 압축
[그림 4] 헤더 압축 ( 출처 : 참고 4)

 

웹의 속도를 높이기 위해 HTTP 1.1과 HTTP 2.0 모두 HTTP 메시지를 압축한다. 하지만 HTTP 2.0은 허프만 코딩을 이용한HPACK이라는 더 발전된 압축 기술을 사용한다.

 

HPACK은 HTTP 헤더의 중복되는 정보들을 효과적으로 제거한다. 이를 통해 HTTP 패킷에서 몇 바이트를 제거하게 되고, 이는 더 빠른 로딩 속도를 만들어준다. 

 

 

우선순위화(Prioritization)

우선순위화란 어떤 콘텐츠를 먼저 로드할 것인지 우선순위를 부여하는 것을 뜻한다.

 

웹 페이지에서 어떤 콘텐츠는 로딩에 매우 많은 시간을 소요한다. 예를 들어 매우 큰 JavaScript 파일을 로딩해야 한다고 하면 이를 로딩하는 동안 지연이 발생하게 될 것이다.

 

HTTP 2.0은 개발자에게 우선순위를 세세하게 제어할 수 있는 제어권을 준다. 따라서 개발자는 어떤 콘텐츠를 먼저 로딩할 것인지 우선순위를 부여할 수 있고, 이를 통해 더 효율적인 로딩이 가능해진다.

 

 

 


참고

 

1. https://www.digitalocean.com/community/tutorials/http-1-1-vs-http-2-what-s-the-difference

2. https://www.geeksforgeeks.org/difference-between-http-2-and-http-1-1/

3. https://www.linkedin.com/pulse/http2-vs-http11-how-differences-impact-performance-umang-agarwal

4. https://web.dev/performance-http2/?hl=ko 

 

반응형

댓글

Designed by JB FACTORY