쿠키
쿠키 사용시 2개의 헤더를 사용하게 된다.
- Set-Cookie : 서버에서 클라이언트로 쿠키 전달(응답)
- Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달
우선 쿠키가 무엇이고 어떤 역할을 하는지 알아보자.
만약 홍길동이라는 이름의 유저가 로그인을 한다고 가정해보자.
1.쿠키를 사용하지 않는 경우
웹 브라우저는 POST 요청으로 user에 대한 로그인 정보를 보내고 서버는 로그인에 대한 응답을 주게 될 것이다.
쿠키를 사용하지 않는 경우, 이미 로그인이 된 상태에서 다시한번 GET 요청으로 Index 페이지로 접근한다고 가정해보자.
서버에서는 로그인 된 유저에 대한 정보가 없기 때문에 해당 요청이 홍길동이 보낸것인지 알수가 없다.
HTTP는 무상태 프로토콜이기 때문에 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어지며 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못한다.
그럼 위의 현상을 해결하기 위해선 어떻게 해야할까?간단하게 생각하면 모든 요청에 사용자 정보를 포함시켜서 보내면 된다.그럼 GET 요청이 들어오더라도 해당 정보를 토대로 서버가 사용자를 알 수 있기 때문이다.하지만, 현실적으로 모든 요청과 링크에 사용자 정보를 포함한다는 것은 보안적으로나 개발 편의성 면에서 문제가 있다.이런 문제를 해결하기 위해서 생겨난 것이 쿠키라는 개념이다.
2. 쿠키를 사용하는 경우
그렇다면 쿠키를 사용하면 어떤것이 변하게 될까?
우선 웹브라우저는 아까처럼 POST 요청으로 user에 대한 로그인 정보를 서버로 보낸다.
그러면 서버는 Set-Cookie 헤더를 사용하여 유저정보 데이터를 응답으로 보낸다.
그럼 웹브라우저는 쿠키 저장소라는 곳에 응답받은 유저정보를 저장해둔다.
이후 GET 요청으로 Index 페이지로 접근을 할 때 쿠키 저장소를 탐색하여 존재하는 유저 정보를 Cookie 헤더에 담아 요청하게 된다.
Cookie 헤더를 받은 서버는 해당 유저정보를 식별할 수 있기 때문에 구별이 가능해지는 것이다.
이렇게 하면 마치 모든 요청에 사용자 정보를 포함하는 것처럼 동작 시킬 수 있게 되는 것이다.
쿠키의 제약요건
물론 앞서 설명했듯이 모든 요청에 사용자 정보를 포함하는 것은 보안 상 문제가 될 수 있기 때문에 쿠키에는 이런 보안조건들을 관리할 수 있도록 제약요건이 존재한다.
예제문을 통해서 살펴보자.
set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
예문을 보면 세션ID, 만료, 경로, 도메인, 보안 정보등이 담겨 있는 것을 확인 할 수 있다.
쿠키의 특징
보통 쿠키는 사용자 로그인 세션관리, 광고 정보 트래킹 등에 사용된다.
또한 쿠키 정보는 항상 서버에 전송되기 때문에 네트워크 트래픽을 추가 유발할 수 있다.
따라서 이런 현상을 방지하기 위해 쿠키는 최소한의 정보만 사용한다.(세션 Id, 인증 토큰...)
따라서 만일 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지를 참고하는 것이 좋다.
단, 주의할 점은 보안에 민감한 데이터는 절대 저장하면 안된다.(주민번호, 신용카드 번호...)
쿠키의 생명주기
쿠키의 생명주기는 expires를 통하여 제어할 수 있으며 만료일이 되면 자동으로 쿠키가 삭제된다.
또한 max-age 옵션을 통해 초단위 제어도 가능하다.
ex) Set-Cookie: max-age=3600(3600초)
이런 특징에 따라 쿠키는 세션 쿠키(만료 날짜 생략시 브라우저 종료시 까지만 유지), 영속 쿠키(만료 날짜 입력시 해당 날짜까지 유지) 2가지의 종류로 나눌 수 있다.
쿠키의 도메인
쿠키 도메인은 문자 그대로 해당 쿠키를 사용하는 도메인을 지정하는 것이다.
명시와 생략 2가지 방법이 존재한다.
- 명시 : 명시한 문서 기준 도메인 + 서브 도메인 포함
- 생략 : 현재 문서 기준 도메인에만 적용
쿠키의 경로
쿠키 경로는 쿠키의 경로를 지정하는 것이다.
해당 경로에 포함한 하위 경로 페이지만 쿠키에 접근이 가능하며 일반적으로 path=/를 통해 루트로 지정을 하게 된다.
쿠키의 보안
보안에는 크게 3가지 옵션이 존재한다.
원래 쿠키는 http, https를 구분하지 않고 전송하지만 보안 옵션을 통해 이를 제어할 수 있다.
- Secure : https인 경우에만 전송
- HttpOnly : http 전송에만 사용, XSS 공격 방지, 자바스크립트에서 접근 불가
- SameSite : XSRF 공격 방지, 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송
'HTTP' 카테고리의 다른 글
HTTP - 캐시와 조건부 요청(1) (0) | 2024.05.01 |
---|---|
HTTP - HTTP 일반 헤더(3) (1) | 2024.01.23 |
HTTP - HTTP 일반 헤더(2) (0) | 2024.01.23 |
HTTP - HTTP 일반 헤더(1) (0) | 2024.01.19 |
HTTP - HTTP 상태코드 (2) (0) | 2024.01.17 |