Set-Cookie : 서버에서 클라이언트로 쿠키 전달

Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달 


예를들어 웹 브라우저에서 GET /welcome 으로 들어온다면

서버에서 HTTP/1.1 200 OK 로 응답한다.  (안녕하세요 손님)

 

만약에 사용자가 로그인을 한다면 ?

서버에서 로그인을 했다고 응답을 준다.        (안녕하세요 xxx님)

 

이때 로그인 이후 welcome 페이지에 접근한다면 (안녕하세요 손님)

이라는 문구를 보게된다. 서버입장에서는 로그인된 사용자인지 아닌지

알 수 없다.

 

HTTP는 무상태 프로토콜이기 때문에

클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어진다.

다시 요청 시 이전요청을 기억하지 못한다.

 

대안으로는 모든 요청과 링크에 사용자 정보를 포함하여 보내게 되면

해결 가능하지만 많은 문제가 생길 수 있다.

- 모든 요청에 사용자 정보가 포함되도록 개발 해야한다.

- 브라우저를 완전히 종료하고 다시 열때 문제가 생긴다.

 

이러한 문제때문에 쿠키라는 개념이 도입된다.

 

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/lecture/61382?tab=note&volume=1.00&speed=0.75

서버는 Set-Cookie 데이터를 쿠키 헤더를 만들어서 응답을 한다. 

이때 웹 브라우저에서 쿠키 저장소에 데이터를 저장해둔다.

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/lecture/61382?tab=note&volume=1.00&speed=0.75

로그인 이후 사용자가 welcome 으로 요청한다면

자동으로 웹 브라우저는 요청을 보낼때마다 쿠키를 무조건 뒤져서 

쿠키값을 서버에 보낸다 이때 서버는 유저가 누군지 알 수 있다.


사용처

- 사용자 로그인 세션 관리

- 광고 정보 트래킹

 

쿠키 정보는 항상 서버에 전송됨

- 네트워크 트래픽 추가 유발

- 최소한의 정보만 사용

- 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지를 공부해보자


쿠키 - 생명 주기

 

Set-Cookie : expires = Sat, 26-Dec-2020 04:39:21 GMT

- 만료일이 되면 쿠키 삭제된다.

 

Set-Cookie : max-age=3600

- 초단위로 세팅할 수 있다.

 

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

 

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


쿠키 - 도메인

 

명시 : 명시한 문서 기준 도메인 + 서브 도메인 포함

- domain=example.org를 지정해서 쿠키 생성

    - example.org는 물론이고

    - dev.example.com도 쿠키 접근

 

생략 : 현재 문서 기준 도메인만 적용

- example.org에서 쿠키를 생성하고 domain 지정을 생략

    - example.org 에서만 쿠키 접근

    - dev.example.org는 쿠키 미접근


쿠키 - 경로

 

이 경로를 포함한 하위 경로 페이지만 쿠키 접근

일반적으로 path=/ 루트로 지정

예)

path=/home 지정

/home -> 가능

/home/level 1 -> 가능

/hello -> 불가능


쿠키 - 보안

 

Secure

- 쿠키는 http,https를 구분하지 않고 전송

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

 

HttpOnly

- XSS 공격 방지

- 자바스크립트에서 접근 불가

- HTTP 전송에만 사용

 

SameSite

- XSRF 공격 방지

- 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송

'웹프로그래밍 > 웹 기본 지식' 카테고리의 다른 글

33. 검증 헤더와 조건부 요청1  (0) 2022.03.09
32. HTTP 헤더2 캐시와 조건부 요청  (0) 2022.03.09
30. 인증  (0) 2022.01.12
29. 특별한 정보  (0) 2022.01.12
28. 일반 정보  (0) 2022.01.12

+ Recent posts