HTTP의 Statless와 Connectionless 특징으로 인해 불필요한 정보 유지가 없다는 것이 장점이 될 수도 있지만, 대부분의 경우 Stateful 상태가 필요한 상황이 많이 있다.
따라서 이러한 약점을 보완하기 위해 쿠키 또는 세션을 사용한다.
쿠키란 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 사용자의 웹 브라우저에 저장되는 작은 텍스트 파일을 말한다. 웹 브라우저는 파일을 저장해놨다가, 동일한 서버에 재요청을 할 때 저장했던 데이터를 함께 전송한다.
주로 쿠키를 보낼 때 세션이 포함되어 들어가지만 아닌 경우도 존재한다.
쿠키의 목적은 주로 세 가지다.
세션도 임시적으로 저장하는 파일은 맞지만, 웹 브라우저가 아닌 웹 서버에 저장된다. 브라우저가 종료될 때까지 유지가 되며, 주로 유출되면 안되는 중요한 데이터가 저장된다.
웹 브라우저에는 총 300개까지 저장이 가능하며, 하나의 도메인당 20개의 값만 가질 수 있다. 쿠키 하나당 최대 4KB까지 저장할 수 있다.
쿠키는 사용자 인증의 만료일 혹은 지속기간을 설정할 수 있다. 만료된 쿠키는 더는 보내지지 않는다.
HTTP 요청을 수신할 때, 서버는 응답과 함께 Set-Cookie
헤더를 전송할 수 있다. 브라우저에 쿠키가 저장되면, 그 후 같은 서버에 보내는 요청들의 HTTP 헤더 안에 포함되어 전송된다.
쿠키의 구성 요소 Set-Cookie: <cookie-name>=<cookie-value>...
HTTP/1.0 200 OK Content-type: text/html Set-Cookie: yummy_cookie=choco Set-Cookie: tasty_cookie=strawberry [page content]
클라이언트가 요청을 보내면 서버에선 쿠키를 생서어한다.
위의 응답처럼 HTTP Response 헤더에 쿠키를 포함시켜 보낸다.
브라우저가 종료되어도 쿠키 만료 기간이 남아있으면 클라이언트 측에서 보관하고 있는다.
GET /sample_page.html HTTP/1.1 Host: www.example.org Cookie: yummy_cookie=choco; tasty_cookie=strawberry
같은 서버에 요청을 할 때, 클라이언트는 HTTP Request 헤더에 저장했던 쿠키를 함께 보낸다.
서버에서 쿠키를 읽어 이전 상태 정보를 변경해야 할 필요가 있으면 쿠키를 업데이트하여 변경된 쿠키를 HTTP Response 헤더에 포함시켜 다시 응답한다.
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
쿠키는 만료기간을 지정해주지 않으면 세션이 끝날 때 (브라우저 창이 닫힐 때) 삭제된다.
쿠키의 라이프타임은 두 가지 방법으로 정의할 수 있다.
Expires
속성에 명시된 날짜에 삭제되거나, Max-Age
속성에 명시된 기간 이후에 삭제된다.Link