HTTP 쿠키
HTTP |
---|
요청 방식 |
헤더 필드 |
상태 코드 |
HTTP 쿠키(HTTP cookie)란 웹 서버에 의해 사용자의 컴퓨터에 저장되는, '이름을 가진 작은 크기의 데이터'이다. 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 사용자의 웹 브라우저를 통해 인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 작은 기록 정보 파일을 일컫는다.[1] 쿠키, 웹 쿠키, 브라우저 쿠키라고도 한다. 이 기록 파일에 담긴 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀐다. 이 수단은 넷스케이프의 프로그램 개발자였던 루 몬툴리가 고안한 뒤로 오늘날 많은 서버 및 웹사이트들이 브라우저의 신속성을 위해 즐겨 쓰고 있다.[2]
쿠키는 소프트웨어가 아니다. 쿠키는 컴퓨터 내에서 프로그램처럼 실행될 수 없으며 바이러스를 옮길 수도, 악성코드를 설치할 수도 없다. 하지만 스파이웨어를 통해 유저의 브라우징 행동을 추적하는데에 사용될 수 있고, 누군가의 쿠키를 훔쳐서 해당 사용자의 웹 계정 접근권한을 획득할 수도 있다.
배경
[편집]이름의 기원
[편집]"쿠키"라는 용어는 웹 브라우저 프로그래머 루 몬툴리가 만들어냈다. 이는 유닉스 프로그래머들이 사용한, 프로그램이 수신 후 변경하지 않은 채로 반환하는 데이터의 패킷을 의미하는 매직 쿠키라는 용어에서 비롯된 것이다.[3][4]
역사
[편집]매직 쿠키는 루 몬툴리가 1994년 6월 웹 통신에서 이것들을 사용하겠다는 생각을 했을 때 컴퓨팅에 이미 사용되고 있었다.[5] 당시 그는 넷스케이프 커뮤니케이션스의 직원이었으며 MCI를 위한 전자 상거래 애플리케이션을 개발하고 있었다. 빈트 서프와 존 클렌신은 넷스케이프 커뮤니케이션스와의 기술 토론에서 MCI를 제시했다. MCI는 서버가 부분적인 트랜잭션 상태를 보유하는 것을 원치 않았으나 이러한 이유로 이들은 넷스케이프에게 각 사용자의 컴퓨터의 상태를 저장하는 방법을 강구할 것을 대신 요청하였다. 쿠키는 가상 쇼핑 카트를 신뢰성있게 구현할 때의 문제의 해결책을 제공하였다.[6][7]
구조
[편집]- 이름
- 값
- 0개 이상의 속성 (이름/값 쌍). 속성은 쿠키의 만료 기간, 도메인, 플래그(예:
Secure
및HttpOnly
) 등의 정보를 저장한다.
구현
[편집]쿠키는 임의 조각의 데이터로서, 웹 브라우저에 의해 선별되어 처음 송신되며 웹 브라우저에 의해 클라이언트 컴퓨터에 저장된다. 이후 브라우저는 상태(이전 이벤트 기억)를 무상태 HTTP 트랜잭션으로 유입시키면서 모든 요청을 서버로 되돌려 보낸다. 쿠키가 없으면 웹 페이지의 각각의 검색 또는 웹 페이지의 구성 요소가, 대체적으로 웹사이트상에서 사용자가 만드는 다른 모든 페이지와 무관한 별개의 이벤트로 취급된다. 쿠키가 일반적으로 웹 서버에 의해 설정되지만 자바스크립트와 같은 스크립트 언어를 사용하여 클라이언트에 의해 설정이 가능하다.(스크립트 언어에 의해 쿠키를 수정하지 못하게 하는 쿠키의 HttpOnly 플래그가 설정되어 있지 않는 경우에 한해)
쿠키 사양[10][11]은 쿠키 지원을 위해 브라우저가 다음의 요건을 충족할 것을 명시한다.
- 4,096바이트 크기의 쿠키를 지원할 것
- 한 도메인 당 최소 50개 쿠키를 지원할 것(예: 각 웹사이트 당)
- 총 최소 3,000개 쿠키를 지원할 것.
쿠키 설정
[편집]쿠키는 Set-Cookie
HTTP 헤더를 사용하여 설정되며 이는 웹 서버의 HTTP 응답을 통해 송신된다. 이 헤더는 웹 브라우저가 쿠키를 저장하고 이를 차기 서버 요청 시 송신할지를 지시한다. (브라우저는 쿠키가 미지원이거나 비활성화되어 있을 경우 이 헤더를 무시한다)
한 예로 브라우저는 www.example.org
웹사이트 홈페이지의 최초 요청을 송신한다:
GET /index.html HTTP/1.1
Host: www.example.org
...
서버는 2개의 Set-Cookie
헤더와 함께 응답한다:
서버의 HTTP 응답에는 웹사이트의 홈페이지 내용이 포함된다. 그러나 이는 브라우저가 2개의 쿠키를 설정할 것 또한 지시한다. 처음 theme은 세션 쿠키로 간주되는데 이는 Expires
또는 Max-Age
속성이 존재하지 않기 때문이다. 세션 쿠키는 브라우저가 닫힐 때 브라우저에 의해 삭제되는 구조이다. 두 번째 sessionToken은 영구 쿠키로 간주되는데 브라우저가 특정 날짜와 시간에 삭제하도록 지시하는 Expires
속성을 포함하기 때문이다.
그 다음 브라우저는 웹사이트에서 spec.html
를 방문하기 위해 다른 요청을 보낸다. 이 요청은 Cookie
HTTP 헤더가 포함되어 있으며 이는 서버가 브라우저에 설정을 지시하는 2개의 쿠키를 담고 있다:
GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123
…
이러한 방식으로, 서버는 이 요청이 이전 것과 관련되어 있는지를 인지하게 된다. 서버는 요청된 페이지를 송신함으로써 응답하며 여기에는 새 쿠키 추가, 기존 쿠키 수정, 쿠키 삭제를 위해 응답에 더 많은 Set-Cookie
헤더를 포함할 수 있다.
쿠키 값은 페이지 요청에 응답하여 Set-Cookie
헤더를 포함시킴으로써 서버에 의해 수정이 가능하다. 브라우저는 이후 오래된 값을 새로운 값으로 치환한다.
쿠키의 값은 ,
와 ;
, 공백 문자를 제외한 인쇄 가능한 모든 ASCII 문자(!
에서 ~
까지, 유니코드 \u0021
에서 \u007E
까지)로 구성될 수 있다. 쿠키의 이름은 =
및 동일 문자를 제외하는데, 그 이유는 이름과 값 사이를 구별하는 구분자 역할을 하기 때문이다. 쿠키 표준 RFC 2965는 더 제약이 있으나 브라우저에 의해 구현되지는 않는다.
쿠키 크럼(cookie crumb)이라는 용어는 쿠키의 이름-값 쌍을 의미하기 위해 사용되기도 한다.[12]
쿠키는 브라우저 내에서 실행되는 자바스크립트와 같은 스크립트 언어에 의해 설정할 수도 있다. 자바스크립트에서 document.cookie
객체는 이 목적을 위해 사용된다. 이를테면 document.cookie = "temperature=20"
는 temperature의 쿠키 이름과 값 20을 만든다.[13]
같이 보기
[편집]각주
[편집]- ↑ “Design & Implementation of License-based Digital Rights Management System”. 《The KIPS Transactions:PartC》 11C (1): 55–62. 2004년 2월 1일. doi:10.3745/kipstc.2004.11c.1.055. ISSN 1598-2858.
- ↑ Schwartz, John (2001년 9월 4일). “Giving Web a Memory Cost Its Users Privacy”. 《The New York Times》 (미국 영어). ISSN 0362-4331. 2020년 7월 16일에 확인함.
- ↑ “Where cookie comes from :: DominoPower”. 《dominopower.com》. 2017년 10월 19일에 확인함.
- ↑ Raymond, Eric (ed.). “magic cookie”. 《The Jargon File (version 4.4.7)》. 2017년 9월 8일에 확인함.
- ↑ Schwartz, John (2001년 9월 4일). “Giving Web a Memory Cost Its Users Privacy”. 《The New York Times》.
- ↑ Kesan, Jey; and Shah, Rajiv ; Deconstructing Code, SSRN.com, chapter II.B (Netscape's cookies), Yale Journal of Law and Technology, 6, 277–389
- ↑ Kristol, David; HTTP Cookies: Standards, privacy, and politics, ACM Transactions on Internet Technology, 1(2), 151–198, 2001 doi 10.1145/502152.502153 (an expanded version is freely available at arXiv:cs/0105018v1 [cs.SE])
- ↑ Peng, Weihong; Cisna, Jennifer (2000). “HTTP Cookies, A Promising Technology”. 《Proquest》. Online Information Review. ProQuest 194487945.
|id=
에 templatestyles stripmarker가 있음(위치 1) (도움말); - ↑ Jim Manico quoting Daniel Stenberg, Real world cookie length limits 보관됨 2013-07-02 - 웨이백 머신
- ↑ IETF HTTP State Management Mechanism, Apr, 2011 Obsoletes RFC 2965
- ↑ “Persistent client state HTTP cookies: Preliminary specification”. Netscape. c. 1999. 2007년 8월 5일에 원본 문서에서 보존된 문서.
- ↑ “Cookie Property”. 《MSDN》. Microsoft. 2008년 4월 5일에 원본 문서에서 보존된 문서. 2009년 1월 4일에 확인함.
- ↑ Shannon, Ross (2007년 2월 26일). “Cookies, Set and retrieve information about your readers”. HTMLSource. 2011년 8월 26일에 원본 문서에서 보존된 문서. 2009년 1월 4일에 확인함.
외부 링크
[편집]- RFC 6265, the current official specification for HTTP cookies