쿠키
쿠키(Cookie)는 서버에서 클라이언트(웹 브라우저)로 전송되어 클라이언트에 저장되는 작은 데이터 조각이다. 쿠키를 사용하면 웹 사이트는 사용자의 상태를 유지하고 사용자의 선호도, 로그인 정보, 장바구니 내용 등을 저장할 수 있다.
쿠키는 Set-Cookie라는 HTTP 응답 헤더를 사용하여 서버에서 클라이언트로 전달된다. 클라이언트는 서버에서 받은 쿠키를 Cookie을 저장하고, 그 후에 클라이언트가 같은 서버로 다시 요청을 보낼 때마다 해당 쿠키를 서버로 전달한다.
쿠키는 클라이언트에 저장되므로 서버가 클라이언트에서 쿠키를 읽을 수 있다. 이러한 이유로 쿠키는 사용자가 로그인한 세션을 유지하고 광고 추적 등에 사용할 수 있다. 그러나 쿠키 정보는 항상 서버에 전송되기 때문에 네트워크 트래픽을 추가 유발할 수 있다는 단점이 있다. 대신 웹 스토리지(localStorage, sessionStorage)를 사용해 내부에 저장할 수 있다.
💣 주의! 보안에 민감한 개인 정보는 쿠키,웹 스토리지등에 저장하면 안된다.(주민번호, 신용카드 번호 등등)
쿠키 - 생명주기 Expires, max-age
쿠키의 생명주기는 Expires와 max-age를 사용하여 설정할 수 있다.
Expires는 쿠키의 만료일을 정해주는 속성으로,
Set-Cookie 헤더에 expires=Sat, 26-Dec-2020 04:39:21 GMT와 같이 설정하여 쿠키의 만료일을 특정 날짜와 시간으로 지정할 수 있다. 만료일이 지나면 브라우저에서 쿠키를 자동으로 삭제한다.
max-age는 쿠키의 지속 시간을 초 단위로 정해주는 속성으로,
Set-Cookie 헤더에 max-age=3600과 같이 설정하여 쿠키를 생성한 후 3600초 동안 쿠키를 유지할 수 있다. 0이나 음수를 지정하면 쿠키를 즉시 삭제된다.
세션 쿠키는 만료 날짜를 생략하여 생성하며, 브라우저를 종료하면 자동으로 삭제된다.
반면, 영속 쿠키는 만료 날짜를 입력하여 생성하며, 해당 날짜까지 쿠키를 유지한다.
쿠키 - Domain
Domain은 Set-Cookie 속성 중 하나로, 쿠키가 전송될 도메인을 지정하는 역할을 한다.
Domain을 명시하면 명시한 문서 기준 도메인과 서브 도메인을 포함한 모든 도메인에서 쿠키에 접근할 수 있다.
예를 들어,
domain=example.org를 지정해서 쿠키를 생성하면 example.org는 물론이고 dev.example.org도 해당 쿠키에 접근할 수 있다.
반면에 Domain을 생략하면 현재 문서 기준 도메인만 적용된다.
예를 들어,
example.org에서 쿠키를 생성하고 Domain 지정을 생략하면 example.org에서만 해당 쿠키에 접근할 수 있으며, dev.example.org에서는 해당 쿠키에 접근할 수 없다.
쿠키 - 경로 Path
쿠키에 Path를 지정하면 해당 경로와 하위 경로에서만 쿠키를 접근할 수 있다.
Path를 지정하지 않으면 쿠키를 설정한 페이지와 그 하위 페이지에서만 쿠키를 접근할 수 있다.
예를 들어,
path=/home으로 지정한 경우
"/home" 경로와 "/home" 하위 경로인 "/home/level1" 및 "/home/level1/level2"에서는 쿠키에 접근할 수 있지만,
"/hello" 경로에서는 쿠키에 접근할 수 없다.
💡 일반적으로 루트 경로인 path=/을 지정하면 모든 페이지에서 쿠키에 접근할 수 있습니다.
쿠키 - 보안 Secure, HttpOnly, SameSite
Secure는
쿠키를 http와 https를 구분하지 않고 전송하는 것을 방지하기 위한 속성이다. Secure를 적용하면 https 프로토콜을 사용하는 웹사이트에서만 쿠키를 전송할 수 있다.
HttpOnly는
XSS 공격을 방지하기 위한 속성으로, 자바스크립트에서 쿠키에 접근하는 것을 불가능하게 합니다. 이 속성은 HTTP 전송에서만 적용된다.
SameSite는
XSRF 공격을 방지하기 위한 속성으로, 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키를 전송한다.
출처 : 인프런 - 모든 개발자를 위한 HTTP 웹 기본지식 by 우아한형제 김영한이사님
'WEB HTTP > HTTP 기본' 카테고리의 다른 글
HTTP 헤더 - 검증과 조건부 요청 (0) | 2023.03.21 |
---|---|
HTTP 헤더 - 캐시 기본동작 (0) | 2023.03.21 |
HTTP헤더 - 일반정보, 특별한 정보, 인증 (0) | 2023.03.21 |
HTTP헤더 - 전송방식 (0) | 2023.03.21 |
HTTP 헤더 - 콘텐츠 협상 (0) | 2023.03.21 |