HTTP
: 서버와 클라이언트 간 통신을 위한 프로토콜
HTTP/0.9~2.0
: TCP 통신을 사용
HTTP 0.9
- Get만 있었고, header도 없었음, 너무 심플
HTTP 1.0
- header, 상태 코드, content-type 생김
- 매번 새로연결해서 성능이 매우 좋지 않음
HTTP 1.1
- Persistent Connection 지정한 timeout동안 커넥션을 닫지 않음
- Pipelining
- 커넥션에서 응답을 기다리지 않음
- 순차적으로 여러 요청을 보냄 → 순차적으로 응답받음
- 단점: 여러개를 보낼 수 있지만, 같이 보내는 애들이 오래걸리면 다 같이 기다려야함
- 요청들의 중복으로 데이터가 쓸데 없이 커짐
HTTP 2.0
- 성능 향상에 초점을 맞춤
- 기존과 다른 메시지 전송 방식
- 바이너리 프레이밍 계층 사용
- 파싱, 전송 속도 향상
- 오류 발생 가능성 낮아짐
- 프레임 단위로 전송이 되어서 순서가 사라짐 ⇒ multi 전송 가능
- Stream Prioritization : 리소스 간 우선 순위 설정 가능
- Server Push
- Header Compression
- 헤더의 크기를 줄여서 페이지 로드 시간 감소
- Dynamic table을 이용 ⇒ 보내야하는 내용을 줄여줌
Quic + HTTP 3.0
- 전송 계층 프로토콜
- google에서 만들었음
- UDP 프로토콜
- TCP는 신뢰성이 있지만, 시간 지연을 줄이기 힘들다.
- UDP는 개발자가 확장할 여지가 많음
- Connection UUID
- 커넥션 재수립 필요X
- ip가 변경되더라도 Connection UUID만 일치하면 계속 연결
- 독립 스트림
- 멀티플렉싱 기능 향상
- 기존 TCP의 Head Of Line Blocking 문제에 대한 방안
- 하나의 chain에서 문제가 생기면 다른 통신들까지 지연됨
- quic은 독립 chain을 통해 전송해서 지연이 없어짐