HTTP 1.0과 HTTP 1.1의 차이
HTTP 1.0과 HTTP 1.1의 가장 큰 차이점은 역시 Keep-alive 기능이다.
HTTP 1.0은 매 요청마다 TCP 세션을 맺어야 했지만 1.1은 한 번의 TCP 세션으로 여러 개의 요청을 날릴 수 있다.
좀 더 자세한 내용은 다음을 참고하자.
HTTP 1.1의 문제점
HTTP 1.1에서는 pipelining 을 통해 하나의 TCP 세션에 여러 HTTP 요청을 보낼 수 있었다.
하지만 이러한 HTTP 1.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 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)를 통해 이러한 문제를 해결한다.
서버 푸쉬는 클라이언트가 요청하지 않았음에도 서버가 콘텐츠를 푸쉬(push), 즉 제공해주는 것을 뜻한다.
예를 들어 [그림 3]처럼, 클라이언트가 html을 요청했을 때 서버 푸쉬가 없다면 css 파일도 따로 요청하고 받아야 한다.
하지만 서버 푸쉬가 가능하다면 클라이언트가 html을 요청했을때 서버가 html 뿐만 아니라 css 파일도 푸쉬(Push) 해줄 수 있다. 이를 통해 성능을 개선할 수 있다.
헤더 압축(Header Compression)
웹의 속도를 높이기 위해 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
'Back-End > [Web]' 카테고리의 다른 글
[Web] HTTP 메소드의 멱등성과 안정성이란? PUT 멱등성, PATCH 멱등성 (0) | 2023.08.28 |
---|---|
[Web] 웹소켓(WebSocket)이란? 웹소켓과 HTTP의 차이 (0) | 2023.03.16 |
[Web] 쿠키(Cookie)와 세션(Session)의 차이, 쿠키란? 세션이란? (6) | 2023.03.09 |
[Web] HTTP 헤더란? HTTP 헤더에 담긴 정보 (0) | 2022.08.09 |
[Web] HTTP 상태코드란? 404 Not Found란? (0) | 2022.08.05 |