hong's android

[cs] HTTP의 발전 과정 본문

Develop/Cs

[cs] HTTP의 발전 과정

_hong 2024. 10. 28. 00:23

HTTP란?

HTTP(하이퍼텍스트 전송 프로토콜)은 웹 페이지, 텍스트, 이미지, 미디어, 바이너리 파일과 같은 다양한 콘텐츠 전송을 가능하게 하는 애플리케이션 계층 프로토콜입니다.

 

 

HTTP/1.0

Http/1.0은 전송 제어 프로토콜 (TCP) 기반으로 연결되며, 각 요청이 별도의 TCP 연결을 통해 생성됩니다. 각 요청마다 TCP 연결을 해야 하므로 비효율적이고, 레이턴시를 증가시킵니다. 또한, TCP는 slow-start 기반으로 작동하기 때문에 많은 TCP 연결이 추가될수록 오버헤드가 발생합니다. 

 

HTTP/1.1

 

- 단일 TCP 연결에서 다수의 요청과 응답 전송

 

Http/1.0의 문제를 해결하기 위해 HTTP/1.1은 연결 유지(Keep-Alive) 메커니즘을 도입했습니다. 이 메커니즘은 “Connection: Keep-Alive” 헤더를 통해 하나의 연결을 여러 요청에 재사용할 수 있게 하여 반복적인 TCP 핸드셰이크와 같은 과정이 줄어들어 지연 시간이 감소했습니다.

 

 

- 응답을 대기하지 않고 여러 요청 전송 가능 (Head-Of-Line-Blocking 이슈 발생)

 

HTTP/1.1은 HTTP 파이프라이닝을 통해 응답을 기다리지 않고 여러 요청을 보낼 수 있도록 했습니다. 하지만 파이프라이닝에서는 “Head-Of-Line-Blocking” 문제가 발생했습니다. 이전 요청이 완료될 때까지 이후 요청이 기다려야 하며, 응답의 순서가 유지되어야 했기 때문에 이러한 방식이 효율을 떨어뜨렸습니다. 이러한 문제로 인해 많은 웹 브라우저에서 HTTP/1.1 파이프라이닝에 대한 지원이 점차 중단되었습니다.

 

HTTP/2

 

- 단일 TCP 연결에서 멀티플렉싱 방식 도입 

 

HTTP/2는 바이너리 프레이밍 레이어를 도입하여 클라이언트와 서버 간 통신에서 더 작은 데이터 단위(프레임)를 사용합니다. 각각의 프레임은 독립적으로 작동하여 순서에 구애받지 통신을 할 수 있습니다. 

 

더 구체적으로,  http 메시지를 독립적인 개별 프레임(frame) 단위로 나누고, 이들을 상호배치(Interleave)하여 전송한 뒤 목적지에 도착하였을 때 재조립하는 방식을 사용합니다.

 

  • 스트림 : 생성된 하나의 커넥션 내 데이터의 양방향 흐름
  • 메시지 : 논리적 요청 또는 응답 메시지에 매칭되는 프레임의 완전한 시퀀스
  • 프레임 : HTTP/2에서 사용되는 커뮤니케이션 단위 중 가장 작은 단위(unit)

 

하나의 스트림안에 한 개 이상의 요청/응답 메시지가 오갈 수 있고, 각 메시지는 프레임 단위로 상대방 측으로 전달됩니다.

 

 

- 효율적인 요청 및 응답 메타데이터 처리

 

HTTP/2는 요청 및 응답의 메타데이터(헤더 필드와 쿠키 데이터 포함)를 압축하는 헤더 압축 기능을 제공합니다.

 

- 서버 푸시 제공

 

HTTP/2는 서버 푸시(server push)라는 유용한 기능을 도입했습니다. 서버 푸시는 새로운 데이터가 사용 가능해질 때 서버가 클라이언트에 업데이트를 선제적으로 전송하여, 클라이언트가 반복적으로 업데이트를 요청할 필요를 없애는 방식입니다. 

 

HTTP/3

HTTP/3와 HTTP/2의 가장 큰 변화는 QUIC 프로토콜을 기반으로 한다는 점입니다. QUIC은 TCP 대신 UDP를 사용하여 인터넷 프로토콜 위에 쌓인 프로토콜 계층의 구조에 변화를 가져왔습니다.

 

 

출처

'Develop > Cs' 카테고리의 다른 글

[CS] 물리 메모리 관리  (0) 2025.02.19
[CS] 프로세스 동기화  (0) 2025.02.11
[CS] 프로세스와 스레드  (1) 2025.01.17
[Cs] 컨텍스트 스위칭  (0) 2023.01.13