HTTP의 기본 특성
- 요청-응답 기반의 클라이언트-서버 구조 프로토콜
- 서버와 클라이언트가 요청과 응답을 주고받음으로써 메시지 통신이 이루어지는 프로토콜
- 서버간에도 HTTP 메시지를 주고받을 수 있다.
- 미디어-독립적 프로토콜
- 어떤 형태의 데이터도 HTTP 메시지로 보낼 수 있음. 즉 형태를 가리지 않음.
예: HTML, JSON, XML 등등
- 비연결성 프로토콜
- HTTP 1.0, 1.1, 2.0은 TCP 기반(연결성 프로토콜)
- 하지만 HTTP는 비연결성 프로토콜 -> 연결성 프로토콜은 다수의 클라이언트가 연결을 시도할 경우 연결을 유지하는 동안 서버의 자원 소모가 너무 크다.
- 스테이트리스 프로토콜
- 서버는 클라이언트의 상태를 기억하지 않는다.
- 왜냐? -> HTTP가 스테이트풀일 경우, 클라이언트는 한 서버에 종속될 우려가 있다. 이 경우에 여러 요청을 보내야 할 경우 한 서버에만 요청해야 한다.
-> 서버의 IP가 바뀌거나, 서버에 장애가 생기거나, 서버가 여러 대 있다거나 하는 등의 상황에 대처할 수 없게 됨.
- HTTP는 스테이트리스 이기에 클라이언트는 한 서버에 종속될 필요가 없고, 여러 번 요청을 보내야 할 경우 여러 서버에 요청할수 있다. -> 서버의 확장이 용이
- 지속 연결 프로토콜(Keep Alive)
- 연결할 때 마다 3-way handshake를 해야할까? -> 메시지 보내는 속도 느려짐, 혼잡 증가, 시간 지연 증가 등이 우려됨.
- 그래서 HTTP는 하나의 연결을 사용해 여러개의 요청과 응답을 주고받을 수 있다.
HTTP 버전별 특성
- HTTP 0.9: 단일 요청 방법(GET 메소드), 비지속 연결, 별다른 기능 X
- HTTP 1.0: 다양한 요청 방법(메소드)과 헤더 추가
- HTTP 1.1: 지속 연결 기능 추가
- HTTP 2.0: 요청 순서대로 응답을 반환할 필요 없음, 헤더 압축
- HTTP 3.0: UDP기반 프로토콜인 QUIC로 변경