[네트워크] Cookie

HTTP 쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각입니다.

서버가 HTTP요청을 수신할 때, 서버는 응답과 함께 Set-Cookie헤더를 전송합니다.

클라이언트는 서버에서 받은 쿠키를 저장하고, HTTP 요청시 쿠키를 서버로 전달합니다.

📄 쿠키는 왜 필요할까?

HTTP는 Stateless상태이기 때문입니다.

서로 상태를 유지하지 않기 때문에 클라이언트와 서버가 요청을 주고 받으면 연결이 끊어집니다.

따라서 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못합니다.

모든 요청과 링크에 사용자 정보를 포함한다면 개발자가 모든 요청에 사용자 정보를 추가해서 개발해야 하기 때문에 비효율적입니다.

이러한 상황에서 쿠키를 써서 웹 브라우저의 쿠키 저장소에 사용자 정보를 저장해 놓을 수 있습니다.

image

이렇게 웹 브라우저의 쿠키 저장소에 사용자 정보를 저장해 놓고 모든 요청에 쿠키 정보를 자동으로 포함시킬 수 있습니다.

📄 쿠키는 언제 사용할까?

쿠키의 주된 사용처는 다음과 같습니다.

  1. 사용자 로그인 세션 관리
  2. 광고 정보 트래킹

보통 사용자 정보를 저장해 로그인 세션을 관리하고,
웹 브라우저 사용자의 광고 선호도를 파악하기 위해 사용합니다.

📄 쿠키를 사용할 때 주의할 점

  1. 최소한의 정보만 사용하자
    쿠키의 정보는 항상 서버에 전송되기 때문에 네트워크 트래픽이 추가로 유발됩니다. 이런 일을 방지하기 위해 세션 id나 인증 토큰 등 최소한의 정보만 사용하는 것이 좋습니다.

  2. 보안에 민감한 데이터는 저장하지 않는다. 웹 브라우저의 쿠키 저장소에 있는 정보들은 서버에 보내는 요청에 자동으로 포함되기 때문에 주민번호, 신용카드 번호 등 보안에 민감한 데이터는 저장하지 않는 것이 좋습니다.

📄 쿠키의 생명주기

▪ 영속 쿠키

만료 날짜를 입력하면 브라우저 종료시 까지만 유지합니다. 0이나 음수를 입력하면 쿠키가 삭제됩니다.

예) Set-Cookie: expires=Sat, 26-Dec2020 04:39:21 GMT

▪ 세션 쿠키

만료 날짜를 생략하면 브라우저 종료시 까지만 유지한다.

📄 쿠키 - 도메인(Domain)

  • 도메인 명시
    헤더에 도메인을 명시하면 명시한 문서 기준 도메인 + 서브 도메인을 포함해서 쿠키를 전송합니다.
    domain=example.org를 지정해서 쿠키를 생성하면
    example.org+dev.example.org를 포함해서 쿠키를 전송합니다.

  • 도메인 생략
    example.org에서 쿠키를 생략하고 domain지정을 생략한다면
    example.org에서만 쿠키 접근이 가능하고 dev.example.org는 쿠키가 접근할 수 없습니다.

📄 쿠키 - 경로(Path)

쿠키는 지정한 경로를 포함한 하위 경로 페이지만 접근이 가능합니다.

일반적으로 path=/ 루트로 지정합니다.

📄 쿠키 - 보안

  • Secure
    원래 쿠키는 http, https를 구분하지 않고 전송하지만 Secure를 적용하면 https인 경우에만 전송합니다.

  • HttpOnly
    XSS공격을 방지하기 위해 사용합니다. 자바스크립트에서 접근이 불가능하며 HTTP전송에만 사용합니다.

  • SameSite
    XSRF공격을 방지하기 위해 사용합니다. 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키를 전송합니다.

출처

Leave a comment