HTTP를 이해하면 웹이 어떻게 작동하는지, 그리고 왜 속도 차이가 나는지가 깔끔하게 보입니다.
하나씩 쉽고 정확하게 정리해드릴게요 👇
✅ 1. “HTTP/1.1” — 이게 버전 맞습니다
HTTP는 HyperText Transfer Protocol의 줄임말로
웹브라우저~서버가 데이터를 주고받는 **통신 규약(프로토콜)**입니다.
그리고 프로토콜도 기술이라서…
→ 새로운 기능이 필요하면 버전이 올라갑니다.
그래서 “HTTP/1.1”은 HTTP 프로토콜의 한 버전이에요.
✅ 2. 그럼 HTTP에는 어떤 버전들이 있었냐?
대표적인 HTTP 버전은 다음과 같아요:
| 버전 | 연도 | 특징 | 지금 사용? |
| 1991 | 아주 초창기, 텍스트만 전송 | ❌ 거의 폐기 | |
| 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인지 확인하는 방법”
도 알려드릴까요?
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 버전 동일합니다.
그러나 예외가 존재합니다.
✔ 같은 도메인이라도 버전이 다를 수 있는 경우
- HTTPS → HTTP/3 전환 및 실패 시 자동 fallback
- 브라우저는 먼저 HTTP/3을 시도
- Fallback 발생 시 HTTP/2 or HTTP/1.1로 재협상
- 그래서 요청마다 버전이 달라지는 사례가 실제로 발생함
- 서버 로드밸런싱으로 인해 서로 다른 서버에 연결될 때
- 어떤 서버는 HTTP/3 지원
- 어떤 서버는 HTTP/2만 지원
→ 연결별로 버전이 다름
- Service Worker or 프록시 캐시 개입
- 프록시는 HTTP/2 지원하지만 origin 서버는 HTTP/1.1만 지원
→ 브라우저↔프록시는 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 핸드셰이크 단계에서 버전 결정 흐름)
네트워크 전문가 수준으로 상세하게 설명해드릴 수도 있어요.
'네트워크2' 카테고리의 다른 글
| 403 에러 & Referrer vs Origin 차이점 (0) | 2025.11.17 |
|---|---|
| navigator.userAgnet = User-Agent 헤더(Request Headers) (0) | 2025.11.17 |
| data: URL Scheme vs Protocol (0) | 2025.11.16 |
| TCP/IP 4계층 모델 (0) | 2025.11.15 |
| OSI 7계층 (네트워크 통신을 7단계로 나눈 모델) (0) | 2025.10.24 |
| 차단 우회 방법 (0) | 2025.10.08 |
| 유니콘 HTTPS :: HTTPS 암호화 통신 :: DPI 차단 우회 기능 (0) | 2025.10.08 |
| Cloudflare 란? :: CDN/프록시 서버 & 원 서버 (0) | 2025.10.08 |