Post

NetWork[Cookie]

HTTP State

기본적으로 HTTP는 무상태(Stateless) 프로토콜로, 클라이언트와 서버 간의 요청과 응답이 각각 독립적으로 이루어지며 연결이 끊어지는 특징이 있습니다.

이로 인해 서버는 이전 요청에 대한 상태를 기억하지 않습니다.

하지만 이러한 무상태 특성을 극복하고 클라이언트와 서버 간의 상태를 유지하기 위한 대안이 존재합니다.

모든 요청에 사용자 정보를 포함해서 전송하면 됩니다.

하지만 이런 경우, 매우 비효율적이고 보안상의 이슈가 발생할 수 있습니다.

이를 해결하기위해 세션 (Session)쿠키 (Cookie)라는 기술이 사용됩니다.

Session

  • 서버쪽에서 사용자의 상태를 관리하는 기술 입니다.
  • 로그인 정보, 세션 ID ( 쿠키를 통해 클라이언트에게 전달됩니다. )를 같은서버에 저장하여, 상태를 유지하게합니다.
  • 세션은 서버에서 관리되기 떄문에 보안적인 측면에서 좋습니다.

http-network-basic-cookie-png

  • 클라이언트 측에 작은 데이터 조각을 저장하는 기술입니다.
  • 세션 ID나 사용자의 선호 설정과 같은 정보를 저장합니다.
  • 클라이언트 브라우저에 저장되기 때문에 브라우저를 닫거나 재시작해도 쿠키는 유지됩니다.
  • 쿠키틀 통해 서버는 클라이언트를 식별하고 필요한 정보를 참조하여 상태를 유지할 수 있습니다.
  • 모든 요청에 쿠키가 자동으로 포함됩니다.
  • Set-Cookie: expires= ….
    • 해당 만료일이 되면 쿠키를 삭제합니다.
  • Set-Cookie: max-age= …
    • 0이나 음수를 지정하면 쿠키를 삭제합니다.
  • 세션 쿠키
    • 만료 날짜를 생략하면 브라우저 종료시 까지만 유지합니다.
  • 영속 쿠키
    • 만료 날짜를 입력하면 해당 날짜까지 유지합니다.
  • 명시
    • 명시한 문서 기준 도메인 과 서브도메인이 모두 포함됩니다.
    • domain=test.org를 지정해서 쿠키를 생성하면 test.org, dev.test.org 모두 쿠키에 접근이 가능합니다.
  • 생략
    • 현재 문서 기준 도메인에만 적용합니다.
    • test.org에만 쿠키를 생성하면 test.org에서만 쿠키 접근이 가능합니다.

      예시 : path=/home

  • 이 경로를 포함한 하위 경로 페이지만 쿠키 접근이 가능합니다.
  • Secure
    • 쿠키는 HTTP, HTTPS를 구분하지 않고 전송합니다.
    • Secure를 적용하면 HTTPS인 경우에만 전송합니다.
  • HttpOnly
    • XXS 공격을 방지하고, 자바스크립트에서는 접근이 불가합니다.
    • HTTP 전송에만 사용합니다.
  • SameSite
    • XSRF 공격을 방지합니다.
    • 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키를 전송합니다.

결론

HTTP는 무상태 프로토콜로, 클라이언트와 서버 간의 요청과 응답이 독립적이며 연결이 끊어지는 특징을 가지고 있습니다.

이를 극복하기 위해 세션과 쿠키 기술이 사용됩니다.

세션은 서버에서 사용자 상태를 관리하며, 쿠키는 클라이언트에 작은 데이터 조각을 저장하여 브라우저를 닫거나 재시작해도 유지됩니다.

이를 통해 클라이언트와 서버 간의 상태를 유지하고 사용자를 식별할 수 있습니다.

This post is licensed under CC BY 4.0 by the author.