Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- transaction
- 인프런
- kotlin
- JPQL
- Greedy
- pointcut
- 김영한
- java
- http
- QueryDSL
- jpa
- AOP
- 자바
- spring
- 그리디
- 스프링 핵심 기능
- db
- 스프링
- Spring Boot
- Servlet
- 백준
- JDBC
- 알고리즘
- springdatajpa
- SpringBoot
- Android
- Thymeleaf
- 스프링 핵심 원리
- Proxy
- Exception
Archives
- Today
- Total
개발자되기 프로젝트
Header - 쿠키 본문
- Set - Cookie: 서버에서 클라이언트로 쿠키 전달(응답)
- Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달.
0. Stateless, Connectionless
HTTP의 특징은 Stateless, Connectionless이다. 즉 서버와 클라이언트는 서로의 상태를 유지하지 않고, data 전송 수 연결을 종료한다. 이와 같은 특징으로 아래와 같은 상황에서 문제..? 불펴함..? 이 발생할 수 있다.
1. welcome page 접속 및 로그인 상황
- welcome page에 접속하면 서버에서 "환영합니다. 고객님" 이라고 띄워준다고 가정.
GET /welcome HTTP/1.1 - 로그인 후에 같은 요청을 다시 보내면 어떻게 될까?
GET /welcome HTTP/1.1 - 서버는 요청 메시지만 보면 로그인을 했는지 어쨌는지 누군지 모른다.
- 서버는 클라이언트의 상태를 유지하지 않기 때문에 "환영합니다. 고객님"말고는 할 수 있는게 없다.
- 하지만 우리는 로그인을 했다면 "ㅇㅇㅇ님이 로그인 했습니다" 와 같이 유저 정보?가 올라가길 바랄 수 있다.
- 그렇다고 모든 요청에 user 정보를 보낼 수 도 없다.
- 이러한 상황에서 사용할 수 있는 것이 쿠키이다.
2. 쿠키 - 로그인
- 쿠키를 사용했을 때 로그인 상황이다.
- 클라이언트는 POST 메서드를 통해 user 정보 전달 및 로그인을 한다.
- 서버는 응답메시지 헤더에 Set-Cookie: use=홍길동 을 전달한다.
- 클라이언트는 쿠키 저장소에 쿠키를 저장한다.
2. 로그인 이후 welcome 페이지 접근
- 웹 브라우저는 서버에 요청을 보낼 때 마다 쿠키를 뒤짐.
- 쿠키 값을 꺼내서 헤더로 보냄.
- Cookie: user=홍길동
- 따라서 로그인 후 welcome page에 접속하면 생성된 쿠키가 전달이 되기 때문에
- 서버는 해당 요청을 보낸 유저의 정보를 알 수 있다.
- 참고로 쿠키가 생성됨녀 모든 요청에 쿠키가 자동으로 포함된다.
3.쿠키
- set-cookie: sessionId=abcde1234;expires=Sat, 26-Dec-2020 00:00:00 GMP;path=/;domain=.google.com;Secure
- 사용처
- 사용자 로그인 세션 관리 --> 진짜 많이씀..
- 광고 정보 트래킹 - 쿠키 정보는 항상 서버에 전송됨
- 네트워크 트래픽 추가 유발
- 최소한의 정보만 사용(세션 id, 인증 토큰)
- 서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지 참고 - 쿠키는 한 번 세팅되면 무조건 전송됨.
- 주의!
- 보안에 민감한 데이터는 저장하면 안됨(주민번호, 신용카드 번호)
4. 쿠키의 생명주기
- Expires
- 만료일이 되면 쿠키 삭제
- set-cookie: expires=Sat, 26-Dec-2020 00:00:00 GMP - max-age
- 0이나 음수를 지정하면 쿠키 삭제
- Set-cookie: max-age=3600(3600초) - 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지됨
- 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지
5. 쿠키 - 도메인
- 생성된 쿠키가 아무 사이트에 전송되면 클일남
- 쿠키는 도메인을 지정할 수 있음.
- demain=example.org
- 명시: 명시한 문서 기준 도메인 + 서브 도메인 포함해서 쿠키 전송함.
- domain=example.org를 지정해서 쿠키 생성하면?
- example.org는 물론이고
- dev.example.org도 쿠키 접근 - 생략 : 현재 문서 기준 도메인만 적용
- example.org에서 쿠키를 생성하고 domain 지정을 생략하면?
- example.org에서만 쿠키 접근
- dev.example.org는 쿠키 미접근
6. 쿠키 - 경로지정
- path=/home
- 이 경로를 포함한 하위 경로 페이지만 쿠키 접근 가능
- 일반적으로 path=/ 루트로 지정
- path=/home 지정하면?
- /home -> 가능
- /home/level1 -> 가능
- /home/level1/level2 -> 가능
- /hello -> 불가능~
7. 쿠키 - 보안
- Secure
- 쿠키는 http, https를 구분하지 않고 전송
- Secure는 적용하면~ https인 경우에만 전송함 - HttpOnly
- XSS 공격 방지
- 자바스크립트에서 접근이 불가능함!
- HTTP 전송에만 사용됨. - SameSite
- XSRF 공격 방지
- 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송.
'인프런 > [인프런]모든 개발자를 위한 HTTP 웹 기본 지식' 카테고리의 다른 글
검증헤더와 조건부 요청 1 (0) | 2021.08.04 |
---|---|
Header - 캐시 기본 동작 (0) | 2021.08.04 |
Header - 인증 (0) | 2021.08.03 |
Header - 특별한 정보 (0) | 2021.08.03 |
Header - 일반 정보 (0) | 2021.08.03 |
Comments