HTTP 서버는 상태를 유지하지 않습니다.(stateless)
서버가, 상태를 유지하지 않는다는 것은, 과거 클라이언트 요청에 대한 정보를 기억하지 못한다는 것입니다. 클라이언트에 대한 요청에 응답을 했으면, 끝 입니다. 서버는 과거에 요청과 응답에 대한 정보를 모릅니다.
이런 특성은, 각 클라이언트의 특성을 기억해 두었다가 이후에 해당 클라이언트에게 맞는 컨텐츠를 제공하는것을 불가능하게 합니다.
그래서 서버는, 클라이언트가 request를 보냈을 때 쿠키값이 없다면, 서버가 클라이언트에게 쿠키값을 발급해줍니다. 그리고 클라이언트의 이후 요청들에는 해당 쿠키값이 포함됩니다.
그러면 서버는 해당 쿠키값으로, 클라이언트들의 상태를 파악하여 각 클라이언트에게 특화된 처리와 응답을 할 수 있습니다.
하지만 이 쿠키값은 브라우저에 저장됩니다. 이는 보안상 취약하고, 탈취의 위험성이 매우 높습니다. 따라서 서버는 클라이언트에게 쿠키를 발급해 주지만, 보안에 취약한 내용들이 아닌, 세션 아이디를 발급해 줍니다. 그리고 원래 쿠키에 담겨있어야 할 관련 정보들은 서버에 저장합니다.
클라이언트가 쿠키(세션 아이디)를 포함한 요청을 하면, 서버는 해당 쿠키(세션 아이디)를 읽어 서버에서 관련 정보를 꺼내 해석합니다. 그에 따른 개별 클라이언트들 별로 특화된 응답을 할 수 있습니다. 이렇게 보안성을 높일 순 있지만, 각 모든 클라이언트들의 세션 정보를 저장하고, 요청 때 마다 읽어와야 하므로, 서버의 속도와 저장용량에 영향을 줍니다.