: 어떤 웹 사이트에 들어갔을 때, 서버가 일방적으로 클라이언트에게 전달하는 작은 데이터
- 즉, 서버가 웹 브라우저에 정보를 저장하고 불러올 수 있는 수단으로,
- 해당 도메인에 대해 쿠키가 존재하면 → 웹 브라우저는 도메인에게 http 요청 시 쿠키를 함께 전달한다.
- 사용자 선호, 테마 , 로그인 상태 유지, 장바구니 등 장시간 보존해야 하는 정보 저장에 적합하다.
'Set-Cookie':[
'cookie=yummy',
'Secure=Secure; Secure',
'HttpOnly=HttpOnly; HttpOnly',
'Path=Path; Path=/cookie',
'Doamin=Domain; Domain=codestates.com'
]
www.google.com
과 같이 서버에 접속할 수 있는 이름을 말한다.www
같은 도메인 앞에 추가로 작성된 부분을 말한다.ttp://www.[localhost.com](http://localhost.com):3000/users/login
이라면 → Domain은 localhost.com
이 된다.naver.com
에서 받은 쿠키를 google.com
에 전송하는 일을 방지할 수 있다.Path
는 세부 경로로써 서버가 라우팅할 때 사용하는 경로를 의미한다.ttp://www.[localhost.com](http://localhost.com):3000/users/login
이라면 → path
(세부 경로)는 /users/login
이다.path
를 명시하지 않으면 기본설정인 /
으로 지정된다.🍪 Path
옵션의 특징
/users
)를 포함하는 하위 경로 또는 세부경로(/users/codestates
)로 요청을 하더라도 → 쿠키를 서버에 전송할 수 있다./**posts/**codestates
로 전송되는 요청은 Path
옵션(/users
)을 만족하지 않기 때문에 → 서버로 쿠키를 전송할 수 없다.MaxAge
와 비슷하지만 → 언제까지 쿠키가 유효한지 심판의 날을 지정할 수 있다.
이때 값은 클라이언트의 시간을 기준으로 하며 → 이후 지정된 시간, 날짜를 초과하면 쿠키는 자동적으로 파과된다.
쿠키는 옵션 여부에 따라 션 쿠키(Session Cookie)와 영속성 쿠키(Persistent Cookie)로 나뉜다.
MaxAge
또는 Expires
옵션이 없는 쿠키로, 브라우저가 실행 중일 때 사용할 수 있는 임시쿠키이다.MaxAge
또는 Expires
에 지정된 유효기간만큼 사용 가능한 쿠키이다.Secure
옵션이 true
로 설정되었다면 → HTTP 를 이용하는 경우에만 쿠키를 전송할 수 있으며,Secure
옵션이 없다면 → 프로토콜에 상관없이 http:// ~
, https:// ~
모두 쿠키를 전송할 수 있다.HttpOnly
옵션을 true
로 설정하면 → 자바스크립트로 쿠키에 접근 불가 ❌ (즉 클라이언트가 DOM을 이용해 쿠키에 접근하는걸 막아주는 옵션이다)HttpOnly
옵션이 명시되어 있지 않을 경우 false
로 지정되고 → <script>document.cookie</script>
를 이용해 자바스크립트에서 쿠키 접근이 가능하므로 XSS 공격에 취약하다.GET
, POST
, PUT
, PATCH
…)의 조합을 기준으로 서버의 쿠키 전송여부를 결정하게 된다.
Lax
: Cross-Origin 요청이라면GET
메소드에 대해서만 쿠키를 전송할 수 있다. → Cross-Origin 요청(사이트가 달라도 가능) /GET
메소드만
Strict
: 가장 엄격한 옵션으로, ross-Origin이 아닌same-site
인 경우에만 쿠키를 전송할 수 있다. →same-site
인 경우에만(사이트가 다르면 불가)
None
: Cross-Origin에 대해 가장 관대한 옵션으로 항상 쿠키를 보내줄 수 있다. 다만 쿠키 옵션 중Secure
옵션이 필요하다
→ 모든 경우 가능(사이트가 달라도) /Secure
옵션 필요
Set-Cookie
라는 프로퍼티로 쿠키를 담아 전송한다.Cookie
'Set-Cookie':[
'cookie=yummy',
'Secure=Secure; Secure',
'HttpOnly=HttpOnly; HttpOnly',
'Path=Path; Path=/cookie',
'Doamin=Domain; Domain=codestates.com'
]
쿠키의 기본 특성 : 서버는 클라이언트에 인증정보를 담은 쿠키를 전송하고 → 클라이언트는 전달받은 쿠키를 서버에 요청과 같이 전송해 Stateless한 인터넷 연결을 Stateful하게 유지할 수 있다.