본문 바로가기
네트워크2

HTTP/1.1 프로토콜 버전 http/1.1, h2, h3 ...

by 로맨틱스터디 2025. 11. 15.
728x90
반응형

HTTP를 이해하면 웹이 어떻게 작동하는지, 그리고 왜 속도 차이가 나는지가 깔끔하게 보입니다.
하나씩 쉽고 정확하게 정리해드릴게요 👇


✅ 1. “HTTP/1.1” — 이게 버전 맞습니다

HTTP는 HyperText Transfer Protocol의 줄임말로
웹브라우저~서버데이터를 주고받는 **통신 규약(프로토콜)**입니다.

 

그리고 프로토콜도 기술이라서…
새로운 기능이 필요하면 버전이 올라갑니다.

 

그래서 “HTTP/1.1”은 HTTP 프로토콜의 한 버전이에요.


✅ 2. 그럼 HTTP에는 어떤 버전들이 있었냐?

대표적인 HTTP 버전은 다음과 같아요:

버전 연도 특징 지금 사용?
HTTP/0.9 1991 아주 초창기, 텍스트만 전송 ❌ 거의 폐기
HTTP/1.0 1996 기본 구조 마련, 단일 요청·단일 연결 ❌ 거의 안 씀
HTTP/1.1 1997 현재까지도 매우 널리 사용됨 많이
HTTP/2 2015 훨씬 빠름, 멀티플렉싱 대세로 자리 잡음
HTTP/3 2022 최신, 지연 최소화, QUIC 기반 🔥 급속 확산

✅ 3. HTTP/1.1이 왜 오래 쓰이냐?

HTTP/1.1은 오래됐지만 안정적이고
전 세계 모든 브라우저와 서버가 기본적으로 지원하는 표준입니다.

그래서 지금도 꽤 많은 사이트가 HTTP/1.1으로 돌아가요.

하지만…


🚀 4. 최신은 HTTP/3 (HTTP/2도 널리 사용)

많은 사람들이 최신 버전이 HTTP/1.1이라고 착각하지만
지금 최신은 HTTP/3입니다.

HTTP/2와 HTTP/3는 뭐가 좋냐면:

HTTP/1.1의 문제점

  • 한 연결에서 한 번에 하나씩만 요청 처리
  • 여러 요청을 보내면 줄 서기(HOL 블로킹) 발생
  • 병렬 요청을 위해 커넥션을 여러 개 열어야 함 (리소스 낭비)

HTTP/2의 개선

  • 멀티플렉싱 → 하나의 연결에서 여러 요청을 동시에 처리
  • 헤더 압축 → 용량 줄임
  • 서버 푸시 → 서버가 먼저 보내줄 수 있음(지금은 소멸 추세)

HTTP/3의 개선

  • TCP 대신 QUIC(UDP 기반) 사용
  • 지연(latency) 엄청 감소
  • 무선 환경(모바일, Wi-Fi)에서 연결 끊김에 강함
  • 유튜브, 구글, 클라우드플레어, 페이스북 등이 이미 채택

🎯 5. 그럼 실제로 뭐가 어떻게 사용되나?

대략 실제 비중은 이래요(2024 기준):

  • HTTP/1.1 — 여전히 많음
  • HTTP/2 — 대부분의 대형 사이트가 기본 사용
  • HTTP/3 — 점점 늘고 있음(YouTube, Google, TikTok 등)

모든 브라우저(Chrome, Safari, Firefox)가 HTTP/3 지원함.


✨ 결론 정리

🔹 HTTP는 “웹 통신 규약”이고 버전이 존재한다.

🔹 HTTP/1.1은 1997년에 나온 오래된 표준이지만 여전히 많이 쓰임.

🔹 최신 버전은 HTTP/3이며, HTTP/2도 널리 사용 중.

🔹 예전 버전(0.9, 1.0)은 사실상 사용 안 함.


원하시면
→ “브라우저에서 지금 내가 방문한 사이트가 HTTP/2인지 HTTP/3인지 확인하는 방법”
도 알려드릴까요?

728x90

Q. “한 사이트에서 요청마다 HTTP 버전이 다를 수 있는가?”를 묻는 질문인데,


결론

✔ 어떤 요청은 HTTP/1.1

✔ 어떤 요청은 HTTP/2

✔ 어떤 요청은 HTTP/3

👉 같은 사이트에서도 요청별로 버전이 다를 수 있습니다.

 

즉,

"한 사이트가 HTTP/1.1을 쓴다" = 모든 요청이 반드시 HTTP/1.1이라는 뜻이 아님.


🔍 왜 그런 일이 생기냐?

1️⃣ HTTP 버전은 “연결(connection)” 단위로 결정됨 — 요청 단위가 아님

브라우저가 서버에 연결을 만들 때(=TCP 혹은 QUIC 연결 생성 시):

  • 서버
  • “난 HTTP/2 가능해”
  • “난 HTTP/3 가능해”
  • “난 HTTP/1.1만 가능해”

라고 협상해서 그 연결에서 사용할 HTTP 버전을 결정합니다.

그 후 그 연결 위에서 이루어지는 모든 요청

그 연결의 버전을 따릅니다.


2️⃣ 하지만, 사이트는 “여러 호스트·여러 서버”로 구성됨

예: A 웹사이트를 접속할 때 로드되는 요청:

요청 종류 호스트 서버 HTTP 지원 여부
HTML www.example.com origin 서버 HTTP/2 가능
이미지 img.examplecdn.com CDN 서버 HTTP/3 가능
JS 파일 static.examplecdn.com 다른 CDN HTTP/2만 가능
광고 ad.partner.com 외부 서버 HTTP/1.1만 가능
결제 API api.example.com 백엔드 서버 HTTP/1.1만 가능

이렇게 도메인별로 서버가 다르고
서버마다 지원하는 HTTP 버전이 다르기 때문에
브라우저는 요청마다 다른 서버에 연결을 만들고,
그때마다 버전 협상 → 다른 HTTP 버전 사용이 가능합니다.

그래서 한 사이트 화면에 이런 일이 실제로 발생합니다 👇

  • HTML → HTTP/3
  • JS/CSS → HTTP/2
  • 이미지 → HTTP/1.1
  • 광고 → HTTP/1.1
  • API 요청 → HTTP/2

요청마다 버전이 달라질 수 있음.


3️⃣ “같은 도메인 내에서도” 버전이 달라질 수 있나?

기본적으로 같은 도메인, 같은 서버(IP, 포트) 라면
같은 TCP/QUIC 연결을 재사용하므로 HTTP 버전 동일합니다.

 

그러나 예외가 존재합니다.

✔ 같은 도메인이라도 버전이 다를 수 있는 경우

  1. HTTPS → HTTP/3 전환 및 실패 시 자동 fallback
    • 브라우저는 먼저 HTTP/3을 시도
    • Fallback 발생 시 HTTP/2 or HTTP/1.1로 재협상
    • 그래서 요청마다 버전이 달라지는 사례가 실제로 발생함
  2. 서버 로드밸런싱으로 인해 서로 다른 서버에 연결될 때
    • 어떤 서버는 HTTP/3 지원
    • 어떤 서버는 HTTP/2만 지원
      → 연결별로 버전이 다름
  3. Service Worker or 프록시 캐시 개입
    • 프록시는 HTTP/2 지원하지만 origin 서버는 HTTP/1.1만 지원
      → 브라우저↔프록시는 HTTP/2
      프록시↔origin은 HTTP/1.1
      → 요청마다 체인에서 버전이 다름

🔬 실제 예시 (브라우저 개발자도구)

예를 들어 크롬 Network 탭에서 보면 이런 식으로 뜰 수 있어요:

요청 Protocol
index.html h3 (http/3)
main.js h2 (http/2)
styles.css h2 (http/2)
logo.png http/1.1
ads.js http/1.1
api/user h2 (http/2)

그냥 같은 사이트 접속했는데 버전이 제각각입니다.


📌 정리

✔ HTTP 버전은 “사이트 단위”가 아니라 “연결 단위”

한 사이트는 수십 개의 서버/CDN/도메인을 사용

각 서버가 지원하는 HTTP 버전이 다르므로

👉 한 사이트 내에서도 요청마다 HTTP 버전이 다를 수 있다

✔ 심지어 같은 도메인이라도 상황에 따라 버전이 달라질 수도 있다

(fallback, 로드밸런싱, 연결 재생성 등)


원하면
✓ Chrome DevTools에서 각 요청의 HTTP 버전 확인하는 방법
✓ HTTP/3 → HTTP/2 fallback 실제 시나리오
✓ CDN(Cloudflare/Akamai)에서 HTTP 버전이 바뀌는 원리

 

Q. h2, h3 protocol

더보기

Network 탭에서 보이는 h3, h2, http/1.1 같은 Protocol 표시가 뭘 의미하는지 정확하게 정리해드릴게요 👇


✅ 1. h3, h2는 무엇인가?

정확히 말하면:

  • h3 = HTTP/3
  • h2 = HTTP/2
  • http/1.1 = HTTP/1.1

맞습니다.
즉, h3와 h2는 각각 HTTP/3과 HTTP/2를 간단히 줄여서 표현한 문자열이에요.


✅ 2. 그럼 왜 HTTP/3이라고 안 쓰고 h3라고 쓰냐?

이유는 브라우저 내부 프로토콜 명칭 때문입니다.

📌 Chrome/Chromium 기반 브라우저에서 프로토콜 표기 방식

Google Chrome, Edge 등에서는 HTTP/2와 HTTP/3을 다음처럼 표기합니다:

실제 프로토콜 브라우저 표시
HTTP/3 h3
HTTP/2 h2
HTTP/1.1 http/1.1

여기엔 다음 이유들이 있습니다 👇


🧩 이유 1) HTTP/3은 TCP가 아니라 QUIC 기반이라 이름이 달라짐

HTTP/3은 원래 "HTTP-over-QUIC"이라는 이름으로 시작했어요.

 

즉:

HTTP/3 = QUIC 위에서 동작하는 HTTP

표준화 과정에서 QUIC과 HTTP/3이 같은 패밀리로 묶였고
그 프로토콜을 **브라우저가 "h3"**라는 ALPN 식별자로 표현하게 됐어요.


🧩 이유 2) ALPN (Application-Layer Protocol Negotiation) 때문에

브라우저는 서버와 TLS 연결을 만들 때
"어느 HTTP 버전을 쓸지" 협상을 합니다.

 

이때 ALPN(Application-Layer Protocol Negotiation, 애플리케이션 레이어 프로토콜 협상)이라는 표준을 사용하고

각 HTTP 버전의 공식 ALPN 이름이 다음과 같아요:

HTTP 버전 ALPN
HTTP/1.1 http/1.1
HTTP/2 h2
HTTP/3 h3

 

즉,
브라우저는 공식적으로 등록된 프로토콜 이름(ALPN) 그대로
Network 패널에 표시하는 겁니다.

 

그래서:

  • HTTP/2 → h2
  • HTTP/3 → h3
  • HTTP/1.1 → http/1.1

이렇게 보입니다.


🔍 그래서 Protocol에서 이렇게 볼 수 있음

Protocol 표시 의미
h3 HTTP/3 (QUIC 기반)
h2 HTTP/2 (TCP 기반)
h3-29
h3-Q050
HTTP/3 초기 버전 (초기 draft)
http/1.1 HTTP/1.1
http/1.0 HTTP/1.0
ws WebSocket
wss WebSocket Secure

✨ 한 문장 요약

Network 탭의 h2, h3는 HTTP/2와 HTTP/3의 공식 프로토콜 식별자(ALPN)이기 때문에 그렇게 표시되는 것이다.


원하시면 이 ALPN 협상이 실제로 어떻게 이루어지는지
(예: TLS 핸드셰이크 단계에서 버전 결정 흐름)
네트워크 전문가 수준으로 상세하게 설명해드릴 수도 있어요.

728x90
반응형