이 포스트는 “HTTP 완벽가이드”의 “11장, 클라이언트 식별과 쿠키”의 일부 내용을 정리한 내용입니다.


  • 사용자를 식별하고 세션을 유지하는 방식 중에서 가장 널리 사용하는 방식
  • 쿠키는 캐시와 충동할 수 있어, 대부분의 캐시나 브라우저는 쿠키에 있는 내용물을 캐싱하지 않음

쿠키의 타입

  • 세션 쿠키(session cookie), 지속 쿠키(persistent cookie)
  • 세션 쿠키와 지속 쿠키의 다른 점은 파기되는 시점
  • Discard 파라미터가 설정되어 이거나, Expires 혹은 Max-Age 파라미터가 없으면 세션 쿠키가 됨

세션 쿠키

  • 사용자가 사이트를 탐색할 때, 관련한 설정과 선호 사항들을 저장하는 임시 쿠키
  • 브라우저를 닫으면 삭제

지속 쿠키

  • 사용자가 주기적으로 방문하는 사이트에 대한 설정 정보나 로그인을 유지하려고 사용

쿠키의 동작

Cookie: name="Brain Totty"; phone="555-1212"
  • 이름=값 형태의 리스트
  • Set-Cookie 혹은 Set-Cookie2(확장 헤더)와 같은 HTTP 응답 헤더에 기술되어 전달

사이트마다 각각 다른 쿠키들

  • 브라우저는 보통 각 사이트 해당하는 2, 3개의 쿠키만을 전달
  • 브라우저가 가지고 있는 모든 쿠키를 전달하면 성능이 저하됨
  • 쿠키들 대부분이 서버에 특화된 키/벨류이기 때문에 대부분의 사이트에서는 무의미한 값
  • 모든 사이트에 쿠키를 전달하면 잠재적인 개인정보 문제를 일으킬 수 있음

Domain 속성

Set-cookie: user="mary17"; domain="airtravelbaragins.com"
  • 서버는 쿠키를 생성할 때 Set-Cookie 응답 헤더에 Domain 속성을 기술해서 특정 사이트가 그 쿠키를 읽을 수 있는지 제어 가능

Path 속성

Set-cookie: user="mary17"; domain="airtravelbaragins.com"; path=/autos/
  • URL 경로의 앞부분을 가리키는 Path 속성을 기술해서 해당 경로에 속하는 페이지에만 쿠키를 전달할 수 있음

Version 0 쿠키

넷스케이프 쿠키라고도 불림

  • 이름=값: 필수 속성
    – ‘이름’과 ‘값’ 모두 큰따옴표로 감싸지 않은 세미콜론, 쉼표, 등호, 공백을 포함하지 않는 문자열
  • Expires: 선택 속성
    – 쿠키의 생명주기를 가리키는 날짜 문자열을 기술
    요일, DD-MM-YY HH:MM:SS GMT
    – 사용할 수 있는 타임존은 GMT
    Set-Cookie: foo=bar; expires=Wednesday, 09-Nov-99 23:12:40 GMT
  • Domain: 선택 속성
    – 기술된 도메인을 사용하는 서버 호스트 명으로만 쿠키를 전송
    – 도메인이 명시되지 않으면, Set-Cookie 응답을 생성한 서버의 호스트명을 사용
    Set-Cookie: SHIPPING=FEDEX; domain="joes-hardware.com"
  • Path: 선택 속성
    – 서버에 있는 특정 문서에만 쿠키를 할당
    /foo 경로는 /foobar, /foo/bar.html에 들어 맞음
    – 경로를 명시하지 않으면, Set-Cookie 응답을 전달하는 URL의 경로가 사용
    Set-Cookie: lastorder=00183; path=/orders
  • Secure: 선택 속성
    – HTTP가 SSL 보안 연결을 사용할 때만 쿠키를 전송
    Set-Cookie: private_id=519; secure

Version 1 (RFC 2965) 쿠키

  • 이름=값: 필수 속성
    $는 예약된 문자이므로 쿠키 이름은 $로 시작할 수 없음
  • Version: 필수 속성
    – 쿠키 명세의 버전을 가리키는 정수 값
    – RFC 2965의 버전은 1
    Set-Cookie2: Part="Rocket_Launcher_0001"; Version="1"
  • Comment: 선택 속성
    – 서버가 쿠키를 사용하려는 의도를 기술
    – 반드시 UTF-8로 인코딩 되어야 함
  • CommentURL: 선택 속성
    – 쿠키를 사용하는 목적과 정책에 대해 상세히 기술된 웹페이지 URL링크를 제공
  • Discard: 선택 속성
    – 클라이언트 프로그램이 종료될 때 클라이언트가 해당 쿠키를 삭제
  • Domain: 선택 속성
    – 기술된 도메인을 사용하는 서버 호스트 명으로만 쿠키를 전송
    – 도메인이 명시되지 않으면, Set-Cookie 응답을 생성한 서버의 호스트명을 사용
  • Max-Age: 선택 속성
    – 쿠키의 생명주기를 초 단위로 산정한 정수 값
    – 클라이언트는 HTTP/1.1 수명 계산 규칙에 따라서 쿠키의 수명을 계산
    – 쿠키의 나이가 Max-Age보다 많아지면, 클라이언트는 쿠키를 제거해야함
    – 값이 0이면 해당 이름을 가진 쿠키를 즉시 지워야 함
  • Path: 선택 속성
    – 서버에 있는 특정 문서에만 쿠키를 할당
    /foo 경로는 /foobar, /foo/bar.html에 들어 맞음
    – 경로를 명시하지 않으면, Set-Cookie 응답을 전달하는 URL의 경로가 사용
  • Secure: 선택 속성
    – HTTP가 SSL 보안 연결을 사용할 때만 쿠키를 전송
    Set-Cookie: private_id=519; secure

출처: "HTTP 완벽가이드", 이응준, 정상일 옮김, 인사이트, 2014