HTTP (HyperText Transfer Protocol)
: 인터넷에서 데이터(HTML과 같은 문서)를 주고 받을 수 있는 프로토콜
➡️ 클라이언트와 서버는 HTTP 프로토콜을 이용해 서로 통신한다.
클라이언트가 서버에 요청을 보내면, 서버가 요청에 대한 응답을 보내는 클라이언트-서버 구조로 이루어져 있다.
HTTP에서는 서버가 클라이언트의 상태를 보존하지 않는다.
따라서 응답과 요청이 독립적이다.
무상태(Stateless)의 한계
로그인과 같이 유저의 상태를 유지해야하는 서비스라면, 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지해야 한다.
TCP/IP는 기본적으로 연결을 유지한다.
연결을 유지하는 모델에서는 클라이언트가 요청을 보내지 않더라도 계속 연결을 유지해야 한다.
➡️ 이 경우, 연결을 유지하는 서버의 자원이 계속 소모된다.
비연결성을 가지는 HTTP에서는 실제로 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊는다.
➡️ 이를 통해 최소한의 자원으로 서버를 유지할 수 있다.
HTTP 1.0 에서는 각각의 자원을 다운로드하기 위해 연결과 종료를 반복해야 했다.
(연결 ~ 종료까지가 새로운 TCP/IP 연결이다.)
➡️ HTTP 1.1 에서 HTTP 지속 연결(Persistant Connections)이 가능해지며, 위의 문제들이 해결되었다.
HTTP 지속 연결에서는 연결이 이루어지고 난 뒤 각각의 자원들을 요청하고, 모든 자원에 대한 응답이 돌아온 후에 연결을 종료한다.
이밖에도 파이프라이닝, 멀티플렉싱 등 다양한 연결 방식이 있다.
HTTP 0.9, 1.0, 1.1, 2.0