CS/네트워크

HTTP 진화과정

leah-only 2025. 2. 21. 19:40

HTTP 란?

클라이언트와 서버간의 reqeust response 프로토콜 

world wide web(www)에서 정보를 주고받을 수 있는 프로토콜

주로 HTML 문서를 주고받는 데 사용


HTTP/0.9

  • 요청 : 단일 라인으로 구성
  • 리소스 경로 : GET 메서드만 사용
  • HTTP 헤더 X → HTML 파일만 전송 가능
  • 상태 or 오류 코드 X

HTTP/1.0

기존 HTTP 기능을 확장

  • 요청 메소드가 GET/HEAD/POST 세 가지로 확장
  • 상태코드 포함 : 요청에 대한 성공 실패 알 수 O
  • HTTP 헤더 (Content-Type) 등장 : HTML 외의 다른 파일도 전송 가능

HTTP/1.1

표준화된 HTTP

 

[특징]

연결 재사용

  • 기존 : 한 연결 당 하나의 요청 처리 후 응답 수신 시 TCP 연결 바로 종료 → 속도 느림
  • 개선: 한 번 수립한 연결을 재사용
    • 연결 유지 시간 제한 (유지 기간 길어지면 서버 부하 발생하기 때문)
    • Keep-Alive 기능을 사용해서 하나의 TCP 연결을 유지하면서 여러 개의 요청과 응답을 순차적으로 처리

 

파이프라이닝 (Pipelining)

  • 기존 : 여러 요청을 보낼 때 하나의 요청과 응답을 끝내고 다음 요청을 보냄
  • 개선 : 여러 개의 요청을 한번에 전송할 수 있음, 

 

캐시 제어 메커니즘 도입

 

요청과 응답에 대한 메타 정보 담는다. 

HTTP 통신 시 Client가 이전에 받은 데이터와 새로 요청한 데이터가 같다면 한 번 더 처리하는 과정을 거치는 것이 낭비

 Cach-Control을 사용해서 Server 부하 줄이고 Client는 네트워크 거치는 시간 아껴서 낭비를 줄이는 해결책으로 사용

 

청크 전송 인코딩

HTML을 분할해 전송하는 방법

 

호스트 헤더 (Host Header)

동일 IP에 여러 도메인을 호스트하게 해줌 (가상 호스팅)


HTTP/2

HTTP/1.1는 TCP/IP 프로토콜 기반으로 하나의 연결 내에서 하나의 요청을 순차적으로 처리하는데 이러한 특징으로 인해 HOL(Head Of Line) Blokcing 문제가 발생할 수 있음 

파이프라이닝은 HOL Blocking 문제를 완화하기 위해 도입된 기법으로 이를 통해 여러 개의 요청을 동시에 전송할 수 있지만 응답은 FIFO(First In First Out) 순서로 전송되므로 먼저 도착한 요청의 응답이 지연되면 그 뒤의 응답 또한 지연되는 HOL Blocking 문제가 여전히 발생할 수 있음 

 

SPDY(Speedy의 약자)

HTTP/1.1의 문제점을 해결하기 위해 개발된 프로토콜 (구글)

 

[특징]

  • HTTP/2는 SPDY 프로토콜을 기반으로 통작
  • SPDY는 항상 TLS(Transport Layer Security)위에서 동작 (즉, HTTPS 필수)

이진(binary) 프로토콜

  • HTTP/1.1:  텍스트 기반 프로토콜 → 데이터 커짐
  • HTTP/2 : 데이터 → 바이너리로 변환 후 전송 →  파싱 속도 높이고 오류 발생 가능성 낮음

 

응답 다중화 (Multiplexing)

  • HTTP/1.1: 하나의 TCP 연결 내에서 하나의 요청을 처리, 요청에 대한 응답 순차적 처리 → HOL Blocking 발생
  • HTTP/2 : 하나의 TCP 연결에서 여러 개의 요청을 동시에 처리하여 HOL Blocking 문제 해결 

 

HTTP 헤더 데이터 압축 (HTTP Header Data Compression)

  • HTTP/2 : HPACK 이라는 헤더 압축 방식을 사용 → 불필요한 오버헤드 줄임

 

서버 푸시 (Server Push)

  • 클라이언트 요청을 예상하여 클라이언트 캐시에 요청할 것 같은 데이터를 미리 넣어두는 기술 → 로드 시간 단축

HTTP/3

HTTP/2까지는 TCP 프로토콜 위에서 동작하며 TCP 특성으로 인해 발생하는 성능 문제!

 

TCP 문제점

  • 연결 지향형 프로토콜: 데이터 손실 시 재전송, 패킷 순서대로 처리해야 하므로 재전송 과정에서 병목현상 발생
  • 흐름 및 혼잡 제어 기능 : 인터넷 환경이 좋을 때 오히려 지연 야기 

→ 이를 해결하기 위해 QUIC 등장

 

QUIC (HTTPS over QUIC)

  • UDP 프로토콜을 기반으로 동작
  • TCP의 신뢰성 보장을 위해 제공되는 기능을 UDP에서 직접 구현해서 성능을 개선한 프로토콜
    • UDP + 패킷 재전송, 혼잡 제어, 흐름 제어 등 (직접 구현)
  • 빠른 연결 설정 : 최초 연결 시 1-RTT만 소요, 다음 연결부터는 0-RTT로 연결 설정 가능
  • 독립적인 스트림: 스트림이 독립적으로 동작하여 하나의 스트림 실패가 다른 스트림에 영향 

HTTP 멱등성

HTTP 메서드 중 POST를 제외한 GET, PUT, DELETE 등은 멱등성을 가짐

멱등성이란, 동일한 요청을 여러 번 보내도 결과가 동일하다는 의미

  • POST 요청을 반복하면 같은 내용이더라도 다른 데이터가 계속 추가됨

CS 로드맵 : https://github.com/devSquad-study/2023-CS-Study

cs 질문 참고 : https://eunsun-zizone-zzang.tistory.com/35