쿠키 미사용 시에 페이지에 접근한다면 어떻게 될까?
일단은 응답을 보낸다
로그인을 한다면 어떻게 될까?
로그인 이후에 welcome 페이지에 접근한다면 어떻게 될까?
홍길동님을 기대했지만 손님이라는 답이 오게 된다. 왜냐면 이 요청이 로그인한 사람인지 아닌지 구분할 방법이 없기 때문이다. (http는 stateless 프로토콜이기 때문!)
이에 대한 대안으로 모든 요청에 사용자 정보를 포함하는 방법이 있다.
하지만 이 요청의 큰 문제는 요청을 보낼 때마다 사용자 정보를 보내야 한다는 점이다.
그리고 브라우저를 완전히 종료하고 다시 열면 로그인된 정보가 지워진다.
쿠키를 이용하여 로그인 시도할 때를 봐보자
로그인을 요청하면 서버는 Set-Cookie에 user는 홍길동이라는 정보를 담은 쿠키를 만들고 클라이언트는 이걸 받아 쿠키 저장소(브라우저 내부에 있음)에 저장한다.
그리고 로그인 이후에 welcome페이지에 들어가면, 자동으로 웹브라우저는 이 페이지를 요청할 때마다 쿠키 저장소 안을 찾아보고 Cookie라는 헤더를 만들어서 user=홍길동이라는 정보를 보낸다. 그래서 서버는 홍길동이 요청했다는 것을 알 수 있게 된다.
일단 쿠키의 사용처를 알아보면
이다. 그리고 쿠키 정보는 항상 서버에 전송되기 때문에 네트워크 트래픽 추가를 유발한다. 그래서 최소한의 정보만 사용하는데 그 예로 세션 id나, 인증 토큰 정도에 쓰인다.
다른 경우가 있긴한데, 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지를 참고하면 된다.
주의할 점으로 보안에 민감한 데이터는 저장하면 안된다(주민번호, 신용카드 번호 등)
좀 더 깊게 들어가보면
서버의 응답인 set-cookie의 예시를 봐보자
ex)set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
여기서 볼 것은 sessionId인데
위에 나왔던 그림1에서 Set-Cookie: user=홍길동이라고 했지만 보통 이대로 보내지 않고 아이디 정보를 가지고 알고리즘을 통해 세션키와 세션 ID가 만들어 지게 되는데 세션키는 서버가 가지고 있고 Set-Cookie에 세션 ID를 보내게 되는 것이다. 그렇게 해서 클라이언트는 서버에 요청할 때마다 세션 ID를 보냄으로써 서버는 이 ID를 서버가 가지고 있는 세션키로 확인하고, 이 요청이 홍길동인지 구분할 수 있게 된다.
Expires, max-age
Domain
예) domain=example.org
예) path=/home
Secure, HttpOnly, SameSite
[ http ] 10. HTTP 헤더(2) - 캐시와 조건부 요청2 (0) | 2021.12.10 |
---|---|
[ http ] 09. HTTP 헤더(2) - 캐시와 조건부 요청1 (0) | 2021.12.10 |
[ http ] 07. HTTP 헤더(1) (0) | 2021.12.05 |
[ http ] 06. HTTP 상태코드 (0) | 2021.11.25 |
[ http ] 05. HTTP 메서드 활용 (0) | 2021.11.10 |