ComputerScience/Web

HTTP cookie란?

LeeDaniel 2023. 1. 4. 14:02

HTTP 쿠키(HTTP cookie)란 하이퍼 텍스트의 기록서(HTTP)의 일종으로서
인터넷 사용자가 어떠한 웹사이트를 방문할 경우
사용자의 웹 브라우저를 통해
인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 작은 기록 정보 파일을 일컫는다.
쿠키, 웹 쿠키, 브라우저 쿠키라고도 한다.
이 기록 파일에 담긴 정보는
인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀐다.
이 수단은 넷스케이프의 프로그램 개발자였던
루 몬툴리(Lou Montulli)가 고안한 뒤로
오늘날 많은 서버 및 웹사이트들이 브라우저의 신속성을 위해 즐겨 쓰고 있다.

쿠키는 소프트웨어가 아니다.
쿠키는 컴퓨터 내에서 프로그램처럼 실행될 수 없으며
바이러스를 옮길 수도, 악성코드를 설치할 수도 없다.
하지만 스파이웨어를 통해 유저의 브라우징 행동을 추적하는데에 사용될 수 있고
,누군가의 쿠키를 훔쳐서 해당 사용자의 웹 계정 접근권한을 획득할 수도 있다.

배경
■이름의 기원
"쿠키"라는 용어는 웹 브라우저 프로그래머 루 몬툴리가 만들어냈다.
이는 유닉스 프로그래머들이 사용한
,프로그램이 수신 후 변경하지 않은 채로 반환하는
데이터의 패킷을 의미하는 매직 쿠키라는 용어에서 비롯된 것이다.


■역사
매직 쿠키는 루 몬툴리가 1994년 6월 웹 통신에서
이것들을 사용하겠다는 생각을 했을 때 컴퓨팅에 이미 사용되고 있었다.
당시 그는 넷스케이프 커뮤니케이션스의 직원이었으며
MCI를 위한 전자 상거래 애플리케이션을 개발하고 있었다.
빈트 서프와 존 클렌신은 넷스케이프 커뮤니케이션스와의 기술 토론에서 MCI를 제시했다.
MCI는 서버가 부분적인 트랜잭션 상태를 보유하는 것을 원치 않았으나
이러한 이유로 이들은 넷스케이프에게
각 사용자의 컴퓨터의 상태를 저장하는 방법을 강구할 것을 대신 요청하였다.
쿠키는 가상 쇼핑 카트를 신뢰성있게 구현할 때의 문제의 해결책을 제공하였다.

구조

출처 : https://ychcom.tistory.com/entry/%EC%BF%A0%ED%82%A4Cookie%EB%9E%80

쿠키는 다음의 요소로 구성된다
1. 이름
2. 값
3. 0개 이상의 속성 (이름/값 쌍).
   속성은 쿠키의 만료 기간, 도메인, 플래그(예: Secure 및 HttpOnly) 등의 정보를 저장한다.

구현
쿠키임의 조각의 데이터로서
,웹 브라우저에 의해 선별되어 처음 송신되며
웹 브라우저에 의해 클라이언트 컴퓨터에 저장된다.

이후 브라우저는 상태(이전 이벤트 기억)를
무상태 HTTP 트랜잭션으로 유입시키면서 모든 요청을 서버로 되돌려 보낸다.

쿠키가 없으면 웹 페이지의 각각의 검색 또는 웹 페이지의 구성 요소가
,대체적으로 웹사이트상에서 사용자가 만드는
다른 모든 페이지와 무관한 별개의 이벤트로 취급된다.

쿠키가 일반적으로 웹 서버에 의해 설정되지만
자바스크립트와 같은 스크립트 언어를 사용하여
클라이언트에 의해 설정이 가능하다.
(스크립트 언어에 의해 쿠키를 수정하지 못하게 하는
쿠키의 HttpOnly 플래그가 설정되어 있지 않는 경우에 한해)

출처 : https://commons.wikimedia.org/wiki/File:HTTP_cookie_exchange.svg


쿠키 사양은 쿠키 지원을 위해 브라우저가 다음의 요건을 충족할 것을 명시한다.
1. 4,096바이트 크기의 쿠키를 지원할 것
2. 한 도메인 당 최소 50개 쿠키를 지원할 것(예: 각 웹사이트 당)
3. 총 최소 3,000개 쿠키를 지원할 것.


■쿠키 설정
쿠키는 Set-Cookie HTTP 헤더를 사용하여 설정되며
이는 웹 서버의 HTTP 응답을 통해 송신된다.
이 헤더는 웹 브라우저가 쿠키를 저장하고
이를 차기 서버 요청 시 송신할지를 지시한다.
(브라우저는 쿠키가 미지원이거나 비활성화되어 있을 경우 이 헤더를 무시한다)
한 예로 브라우저는 www.example.org 웹사이트 홈페이지의 최초 요청을 송신한다:



서버는 2개의 Set-Cookie 헤더와 함께 응답
한다:

서버의 HTTP 응답에는 웹사이트의 홈페이지 내용이 포함된다.
그러나 이는 브라우저가 2개의 쿠키를 설정할 것 또한 지시한다.
처음 theme은 세션 쿠키로 간주되는데
이는 Expires 또는 Max-Age 속성이 존재하지 않기 때문이다.
세션 쿠키는 브라우저가 닫힐 때 브라우저에 의해 삭제되는 구조이다.
두 번째 sessionToken은 영구 쿠키로 간주되는데
브라우저가 특정 날짜와 시간에 삭제하도록 지시하는 Expires 속성을 포함하기 때문이다.

그 다음 브라우저는 웹사이트에서
spec.html를 방문하기 위해 다른 요청을 보낸다.
이 요청은 Cookie HTTP 헤더가 포함되어 있으며
이는 서버가 브라우저에 설정을 지시하는 2개의 쿠키를 담고 있다


이러한 방식으로, 서버는 이 요청이 이전 것과 관련되어 있는지를 인지하게 된다.
서버는 요청된 페이지를 송신함으로써 응답하며
여기에는 새 쿠키 추가, 기존 쿠키 수정, 쿠키 삭제를 위해
응답에 더 많은 Set-Cookie 헤더를 포함할 수 있다.

쿠키 값은 페이지 요청에 응답하여
Set-Cookie 헤더를 포함시킴으로써 서버에 의해 수정이 가능하다.
브라우저는 이후 오래된 값을 새로운 값으로 치환한다.

쿠키의 값은 ,와 ;, 공백 문자를 제외한 인쇄 가능한
모든 ASCII 문자(!에서 ~까지, 유니코드 \u0021에서 \u007E까지)로 구성될 수 있다.
쿠키의 이름은 = 및 동일 문자를 제외하는데
,그 이유는 이름과 값 사이를 구별하는 구분자 역할을 하기 때문이다.
쿠키 표준 RFC 2965는 더 제약이 있으나 브라우저에 의해 구현되지는 않는다.

쿠키 크럼(cookie crumb)이라는 용어는 쿠키의 이름-값 쌍을 의미하기 위해 사용되기도 한다.

쿠키는 브라우저 내에서 실행되는 자바스크립트와 같은
스크립트 언어에 의해 설정할 수도 있다.
자바스크립트에서 document.cookie 객체는 이 목적을 위해 사용된다.
이를테면 document.cookie = "temperature=20"는
temperature의 쿠키 이름과 값 20을 만든다.

쿠키와 로그인

출처 : https://velog.io/@rlfrkdms1/%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC%EC%99%80-%EC%84%B8%EC%85%98%EC%9D%98-%EA%B5%AC%EC%A1%B0

 

 


이 글은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0에 따라
공개된 위키백과 문서 HTTP쿠키의 자료를 사용합니다.

 

 
반응형

'ComputerScience > Web' 카테고리의 다른 글

[Web] JWT( JSON Web Token )  (0) 2024.11.22
[WebServer] caddy  (1) 2024.10.30
Session(세션)이란?  (0) 2023.01.04
HTTP( HyperText Transfer Protocol )  (0) 2021.07.01
hosts  (0) 2021.04.23