본문 바로가기
HTTP

[HTTP] 쿠키 이해하기- 파라미터

by 개미가되고싶은사람 2024. 3. 13.

쿠키(Cookie)란?

HTTP는 요청과 응답을 교환한 후 서버 연결을 끊는 무상태 프로토콜입니다. 이는 서버가 새 요청을 수신해도 이전 요청을 기억하지 않는다는 것을 의미한다. 이 문제를 해결하기 위한 한 가지 방식은 모든 요청에 ​​사용자 정보를 포함하는 것입니다. 그러나 이 방법은 보안 위험을 초래하고 개발이 복잡해진다.

쿠키는 이 문제에 대한 해결책을 제공한다. 이는 웹 서버에서 사용자 브라우저로 전송되는 작은 데이터 조각으로, 일반적으로 키=값 형식이다. 브라우저는 이러한 쿠키를 저장했다가 동일한 웹사이트를 다시 요청할 때 서버로 다시 전송한다.

 

쿠키에 흐름

  1. 서버에서 set-cookie에 정보(key, values로 구성)를 저장한 뒤 웹 브라우저 내부에 해당 쿠키를 쿠키 저장소에 저장한다.
  2. 브라우저는 이후에 서버에 요청을 보낼 때 마다 쿠키 저장소에서 쿠키를 조회해서, Cookie헤더를 통해 함께 보낸다.

 

 

1. 쿠키의 생명주기

expires와 max-age를 통해 만료일을 설정할 수 있다.

 

expires

  • GMT를 기준으로 작성해야 된다.
  • 구체적인 날짜를 작성해야 된다.
  • 해당일이 지나면 쿠키 삭제

max-age

  • 0이나 음수를 지정하면 쿠키 삭제
  • 살아있을 시간을 초 단위로 설정

세션 쿠키: 만료 날짜를 생략하면 브라우저 종료까지만 유지

영속 쿠키: 만료 날짜를 입력하면 입력한 날짜까지 유지

 

2. 쿠키 path(경로)

특정 경로에서만 쿠키를 활성화 시키는 속성 경로를 path=/hello로 cookie를 설정했다면, */hello와 */hello/모든 하위경로는 cookie가 저장되어 확인 할 수 있지만, 그외 다른 경로(/hello를 제외한)의 경우 cookie를 확인 할 수 없다.

 

3. 쿠키 domain(도메인)

내가 만든 쿠키가 아무 사이트에나 막 들어가면 난감하다. 따라서 쿠키가 전송되어질 도메인을 지정하는 속성이다.

 

domain특징

  • 도메인을 설정할 경우 해당 도메인 및 하위 도메인에서만 쿠키에 접근할 수 있다.
  • domain을 설정하지 않을 경우 현재 문서 기준 도메인만 적용

 

4. 쿠키 - 보안

기본적으로 쿠키는 http, https를 구분하지 않고 전송한다.

4-1. secure

  • Secure를 적용하면 https인 경우에만 전송

4-2. httpOnly

  • HTTP 전송에만 사용
  • 자바스크립트로 document.cookie에 접근하여 쿠키 접근을 제한한다.
    • 즉 자바스크립트로 쿠키를 탈취할 수 없으며, XSS 공격 방지한다.

4-3. SameSite

  • XSRF 공격 방지
  • 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 전송하도록 제한을 둘 수 있다.

 

 

참조: 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한