HTTP 헤더1 - 일반 헤더(쿠키 Cookie)

yiwoojung·2023년 9월 1일
0

Cookie

  • 클라이언트가 서버에서 받은 쿠키를 저장하고 http 요청시 서버로 전달
  • 모든 요청에 쿠키 정보를 자동으로 포함한다
    • 웹브라우저가 어떤 요청을 하던 지정한 서버에 대해서는 쿠키데이터를 자동으로 뽑아서 자동으로 보낸다
    • 사용자가 모든 요청에 개발자들이 직접 넣지 않아도 쿠키 매커니즘으로 자동으로 해결할 수 있다
    • 그런데 모든 곳에 쿠키를 다 보내버리면 너무 문제가 있겠죠
  • sessionId, expires, path, domain, secure
  • 주 사용처
    • 사용자 로그인 세션 관리
    • 광고 정보 트래킹
  • 쿠키 정보는 항상 서버에 전송됨
    • 세팅하면 무조건 서버로 보내버린다
    • 네트워크 추가 트래픽이 유발
    • 최소한의 정보만 사용해야함(세션 id, 인증토큰)
    • 요청할 때마다 보내는게 아니고 클라이언트에서 들고 있고 필요할 때만 웹브라우저에서 꺼내서 쓰고 싶다면 9서버에 전송하지 않고 웹 브라우저 내부에 데이터를 저장하고 싶으면) 웹 스토리지를 사용하면 된다
  • 보안에 민감한 데이터는 저장하면 안된다!!

쿠키없는 로그인

웹브라우저에서 쿠키를 사용하지 않고 페이지에 접근한다면

  • 브라우저에서 로그인한다
    ⇒ 로그인 응답 200 안녕하세요 홍길동님
    ⇒ 다시 페이지 접근
    ⇒ 안녕하세요 손님

다시 요청하면 서버에서는 유저가 홍길동인지 누군지 알 수 없다.

http는 무상태 프롵토콜이므로 클라이언트와 서버가 어느정도 요청과 응답을 주고 받으면 연결이 끊어진다.

클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못한다.
그래서 클라이언트와 서버는 서로 상태를 유지하지 않는다.

모든 요청에 사용자 정보를 포함해서 보내면 될까?

이건 보안에도 문제가 있고
모든 요청에 사용자 정보가 포함되어야 하니까 개발자가 힘듬

또 만약 브라우저를 종료하고 다시 킨다면 ?
하여간 너무 힘들다

이걸 해결하기 위해서 쿠키가 도입되었다.


쿠키 로그인

Set-Cookie: user=홍길동

웹브라우저 내부에는 쿠키 저장소가 있다.

로그인을 성공하면 그 저장소에 서버가 set-cookie로 저장한 값을 저장한다

로그인 이후에 웹브라우저가 페이지에 들어가면 자동으로 웹브라우저는 이 서버에 요청을 보낼때마다 쿠키를 무조건 뒤진다

cookie: user=홍길동 으로 서버에 보낸다.


쿠키의 생명주기

expires

  • 만료일이 되면 자동으로 쿠키 삭제

max-age

  • 0이나 음수를 지정하면 쿠키 삭제

세션 쿠키

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

영속 쿠키

  • 만료 날짜를 입력하면 해당 날짜까지 유지

쿠키와 도메인

  • 쿠키는 도메인을 지정할 수 있다
    • 아무사이트에 들어가지 않도록 함
  • 명시
    • 문서 기준 도메인 + 서브 도메인 포함
    • domain=example.org
      • example.org
      • dev.example.org
  • 생략
    • 현재 문서 기준 도메인안 적용
    • example.org에서 쿠키를 생성하면 example.org에서만 쿠키 접근 가능
    • dev.example.org는 쿠키 접근 불가능

경로

  • 이 경로를 포함한 하위 경로 페이지만 쿠키 접근
  • 일반적으로 path=/ 루트로 지정

쿠키와 보안

Secure

  • 쿠키는 원래 http, https를 구분하지 않고 전송하는데
  • secure를 적용하면 https 경우에만 전송한다

HttpOnly

  • xss 공격을 방지
  • 자바스크립트에서 접근할 수 없고
  • http 전송에서만 사용

SameSite

  • xsrf 공격을 방지
  • 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키를 전송
  • 브라우저에서 어느정도로 제공하는지 알아보고 써야함


Reference.

다음글

쿠키와 로그인

profile
프론트엔드 개발자

0개의 댓글