눈송이의 개발생활
[Network]HTTP/1.1 HTTP/2.0 HTTP/3.0 본문
HTTP 종류
- HTTP/0.9 ~ HTTP/2.0 : TCP 사용
- HTTP/3.0 : UDP 사용
HTTP/0.9
1️⃣- 단일 라인으로 구성된 요청
- GET이 유일한 method
- HTML 파일만 전송 가능
HTTP/1.0
2️⃣- Header, Status code, Content-type 포함
- 1 request + 1 response / connection
- 매번 새로운 연결로 성능 저하
- 서버 부하 비용 증가
HTTP/1.1
3️⃣- persistent connection : 지정한 timeout 동안 connection을 닫지 않는 방식
- pipelining 기법 도입
- 하나의 connection에서 응답을 기다리지 않고 순차적인 여러 요청을 연속으로 보내 그 순서에 맞춰 응답을 받는 방식
- 지연 시간 감소
단점
- Head of line blocking : 1번째 요청이 서버에서 시간이 너무 오래 걸리는 경우 뒤의 작업들도 늦어지는 것
- Header 구조의 중복 : 연속된 요청의 경우 같은 값이 많아도 중복되게 보내서 데이터의 크기가 커짐
HTTP/2.0
4️⃣- 기존 HTTP/1.X 버젼의 성능 향상에 초점을 둔 프로토콜
- 표준의 대체가 아닌 확장
- 여러 개의 HTTP stream을 하나의 TCP connection으로 처리해 HOLB 문제를 해결되지 ❌
- HTTP 메시지 전송 방식의 변화
- 바이너리 프레이밍 계층 사용
- 파싱 & 전송 속도 ⬆️
- 오류 발생 가능성 ⬇️
특징
- request and reponse multiplexing (다중화 가능)
- Head of line blocking(HTTP/1.1) 해결
- multiplexing : 한 개의 TCP 연결에서 여러 개의 데이터를 섞이지 않게 보내는 방법
- stream : 각각의 데이터 흐름
- stream prioritization
- 리소스 간 전송 우선 순위 설정할 수 있음
- 먼저 전송하고자 하는 stream에 가중치
- server push
- 클라이언트에서 요청하지 않은 데이터를 서버가 알아서 전송
- header compression
- 헤더의 크기를 줄여 페이지 로드 시간 감소
- 중복되는 부분 보내지 ❌
QUIC
5️⃣- Quick UDP Internet Connection
- 전송 계층 프로토콜 (TCP나 UDP 같은 프로토콜)
- TCP handshake 과정을 최적화하는데 초점을 맞춰 설계됨
- TCP가 handshake할 때 오버헤드와 HOLB의 문제를 피할 수 없기 때문에
- UDP 기반
- 각각의 패킷 간 순서가 존재하지 않는 독립적인 패킷 (데이터그램 방식)
- 데이터 전송에 집중한 설계
- 별도의 기능 ❌
- 원하는 기능 구현(Header) ⭕
- 커스터마이징으로 신뢰성 확보
- TCP의 지연은 줄이면서 TCP만큼 신뢰성 확보 가능
특징
- 전송 속도 향상
- 첫 연결 설정에서 필요한 정보와 데이터 함께 전송
- 연결 성공 시 설정 캐싱해서 다음 연결 때 바로 성립 가능 (handshake 필요 ❌)
- connection UUID라는 고유 식별자로 서버와 연결
- connection 재수립 할 필요 ❌
- 클라이언트의 IP 바뀌어도 연결 유지
- TLS 기본 적용
- IP Spoofing, Replay Attack 방지
- 독립 스트림 ⇒ 향상된 멀티플렉싱 기능
HTTP/3.0
6️⃣- UDP 사용
- QUIC 프로토콜 위에서 돌아가는 HTTP
참고
https://velog.io/@kcwthing1210/HTTP-1.1-vs-HTTP-2.0-vs-HTTP-3.0
https://woojinger.tistory.com/85
'Computer Science > Network' 카테고리의 다른 글
[Network]TLS/SSL Handshake (0) | 2023.02.09 |
---|---|
[Network]대칭키와 공개키 (0) | 2023.02.08 |
[Network]HTTP와 HTTPS (0) | 2023.02.07 |
[Network]TCP/IP 흐름제어(Flow Control)와 혼잡제어(Congestion Control) (0) | 2023.02.06 |
[Network]TCP와 UDP (0) | 2023.02.03 |
Comments