HTTP란

HyperText Transfer Protocol. 웹 상에서 클라이언트와 서버 간의 통신을 위한 프로토콜을 이야기한다. TCP 전송 프로토콜을 사용하여 신뢰성 있는 통신을 가능하게 한다(HTTP/3부터는 UDP를 사용).

HTTP의 특징

Connectionless

HTTP는 요청과 응답을 한 번씩 주고받은 후에 통신을 끊는다. 이는 HTTP 1.1에서 Persistent Connection으로 해결할 수 있다. 한 번 3 way handshake를 통해 TCP 연결을 성립한 다음 일정 시간 동안 연결이 끊어지지 않는다.

Stateless

연결이 끊어지게 되면 해당 클라이언트의 이전 상태나 요청 등을 저장하지 않는다. 이를 위한 해결 방법이 클라이언트, 서버 단에서 인증 정보를 저장하는 쿠키와 세션이다.

Stateless는 서버의 scalability를 위해 필요하다. 서버가 늘어나게 되면 인증 정보를 서로 공유해야하기 때문에 그만큼의 비용이 늘어나게 된다.

3-Way Handshake

클라이언트와 서버가 신뢰성 있는 연결을 위해 서로 확인하는 과정. 신뢰성있는 connection을 만들기 위해 3-way handshake를 한다.

Untitled

클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보낸다.

서버는 SYN 요청을 받고 클라이언트에게 요청 수락의 의미인 ACK와 SYN가 설정된 패킷을 발송하고 기다린다. 클라이언트가 서버에게 ACK를 보내면 이 이후부터 연결이 성립되며 실제 데이터를 전송할 수 있다.

참고) 4-Way Handshake

HTTP/0.9

HTTP/1.0