HTTP는 상태를 갖지 않는다. 각 요청을 별도로 처리하기 때문에 쉽고 빠르게 구현 및 확장가능하다.
그럼에도 불구하고 서버가 클라이언트의 상태를 기억해야 하는 경우 쿠키를 사용한다.
쿠키는 서버에 의해 생성되어 응답을 통해 클라이언트로 전달되며 클라이언트(브라우저)에 의해 관리된다.
HTTP/2.0 200 OK
Content-Type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry
GET /sample_page.html HTTP/2.0
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry

세션 관리
개인화
추적
쿠키는 브라우저를 통해 자동으로 서버에 전송된다. 이는 편리하지만 몇가지 문제점도 야기한다.
매번 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 localStorage나 sessionStorage를 사용하자.
Set-cookie: id = "user1"; Expires = Mon, 16 Jan 2023 22:00:00 GMT;
Max-age=3600; Domain="thedomain.com"; Path="/example"; Secure; HttpOnly
쿠키는 <이름>=<값> 쌍으로 이루어지는 필수 값과 그밖에 부가적인 속성들로 이루어진다.
각 부분들은 세미콜론을 통해 구분된다.
위 쿠키의 이름은 id이며 "user1"값을 가진다. 나머지 부분은 만료 시간, 보안 설정등 부가적인 정보를 나타낸다.
만료 속성을 지정하지 않을 시 세션 쿠키가 된다.
영속 쿠키 : 브라우저가 종료되어도 해당 만료되기 전까지 유지된다.
세션 쿠키 : 브라우저 종료 시에 삭제된다.
Expires
Expires = Mon, 16 Jan 2023 22:00:00 GMT;Max-age
Max-age=3600;HTTP 요청 시 브라우저가 자동으로 쿠키를 포함시킨다.
하지만 아무 쿠키나 포함시키는 것은 아니다.
브라우저는 Domain과 Path 속성을 확인하여 선택적으로 쿠키를 포함시킨다.
Domain
Domain="thedomain.com"; Path
Path="/example";Secrue
HttpOnly
SameSite=<samesite-value>samesite-value는 Strict, Lax, None 3가지가 있다.
Strict : 가장 보수적인 정책
Lax : Strict에 비해 상대적으로 느슨한 정책
None : 기본 값, SameSite 속성을 지정하지 않은 것과 같은 상태
퍼스트 파티 쿠키(First-party cookies)
서드 파티 쿠키(Third-party cookies)
Mohamed Saleh, 『Browser Cookie Domains』, Baeldung
A. Barth, 『HTTP State Management Mechanism』, RFC6265
mdn web docs, 『HTTP/Cookies』
mdn web docs, 『HTTP headers/Set-Cookie』
이현섭, 『브라우저 쿠키와 SameSite 속성』, seob.dev(2021)
위키백과, 『사이트 간 스크립팅』
mdn web docs, 『Types of attacks』
Ilma Vienažindytė, 『크로스 사이트 요청 위조란?』, NordVPN