ComputerScience/HTTP

HTTP/2

dev_swan 2023. 11. 16.

✏️ HTTP/2

HTTP/2는 SPDY 프로토콜에서 파생된 HTTP/1.x보다 지연시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며, 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜입니다.

더보기

💡 SPDY 프로토콜

웹의 퍼포먼스 향상을 목표로 Google에 의해 개발된 개방형 네트워킹 프로토콜입니다. SPDY 프로토콜은 기본적으로 HTTP의 대안으로 고안되었으며, 웹 페이지의 로드 시간을 줄이기 위한 여러 최적화 및 기능을 제공합니다.

 

🔁 멀티플렉싱

멀티플렉싱이란 하나의 통신채널을 통해서 여러 개의 스트림을 사용하여 송수신한다는 것입니다.

더보기

💡 스트림 (Stream)

스트림은 연속적인 데이터의 흐름을 의미합니다. 프로그래밍에서 스트림은 파일, 네트워크 연결, 입력 장치 등 다양한 데이터 소스로부터 연속적으로 데이터를 일거나 쓰는 작업을 추상화하는 데 사용됩니다.

 

HTTP/1.1에서는 동시에 여러 리소스를 다운로드 받기 위해서 여러 개의 TCP 연결을 열어야 했습니다. 하지만 이런 방법은 리소스를 낭비하며, 네트워크 혼잡을 증가시키는 원인이 되기도 했습니다. 또한 하나의 TCP 연결에서 요청을 보낼 때, 첫 번째 요청의 응답이 오기 전까지 그 다음 요청을 보낼 수 없는 순차적인 특성 때문에 HOL Blocking 문제가 발생했습니다.

 

HTTP/2는 하나의 TCP만 연결만을 사용해 여러 개의 스트림을 동시에 전송합니다. 각 스트림은 독립적인 요청과 응답의 쌍을 가지며, 다른 스트림에 영향을 주지 않습니다. 또한 HTTP/2는 메시지를 작은 프레임으로 나누어 전송합니다. 이렇게 나눈 프레임들은 여러 스트림에서 동시에 전송될 수 있습니다. 서버와 클라이언트는 이 프레임들을 재조립하여 원래의 메시지를 복원합니다.

 

HTTP 1.1과 HTTP 2 - 면접을 위한 CS 전공지식 노트

HTTP/2는 멀티플렉싱을 통해 단일 연결을 사용하여 병렬로 여러 요청을 받을 수 있고 응답을 줄 수 있으며, HTTP/1.x에서 발생하는 문제인 HOL Blocking 문제를 해결할 수 있습니다.


🗜 헤더 압축

HTTP/1.x에는 헤더의 크기가 큰 문제가 있었습니다.

 

HTTP/1.x의 예시 헤더

GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate, br Connection: keep-alive Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0

 

HTTP/2에서는 HPACK라는 알고리즘을 사용하여 헤더를 압축합니다. 이로 인해 전송되는 헤더 데이터의 크기가 줄어듭니다.

더보기

💡 허프만 코딩(HPACK)

허프만 코딩(Huffman Coding) 알고리즘은 데이터의 빈도나 확률에 기반하여 가장 효율적인 방법으로 데이터를 인코딩하는 데 사용됩니다. 빈도가 높은 정보는 적은 비트 수를 사용하여 표현하고, 빈도가 낮은 정보는 비트 수를 많이 사용하여 표현해서 전체 데이터의 표현에 필요한 비트양을 줄이는 원리입니다.


🌐 서버 푸시

HTTP/1.1에서는 클라이언트가 서버에 요청을 해야 파일을 다운로드 받을 수 있었다면, HTTP/2는 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있습니다.

HTTP 2 서버 푸시 - https://velog.io/@taegon1998/HTTP2.0-HTTP3.0

예를 들어, html에는 css나 js파일이 포함되기 마련인데 html을 읽으면서 그 안에 들어 있던 css파일을 서버에서 푸시하여 클라이언트에 먼저 줄 수 있습니다.

'ComputerScience > HTTP' 카테고리의 다른 글

HTTP/3.0  (0) 2023.11.16
HTTPS  (0) 2023.11.16
HTTP/1.0, HTTP/1.1  (0) 2023.11.16

댓글