HTTP프로토콜의Stateless를 보완하기 위해 사용하는 방법 :
。HTTP는Stateless Protocol이므로, Server와 Client 간HTTP Transaction후TCP Connection을 종료하면 상태정보를 유지하지 않는다.
▶ 통신이 끊어지면 상태정보가 유지되지 않으므로, 이를 보완하기위해HTTP는Cookie,Session,Token를 사용
쿠키 (
cookie) :
。Stateless Protocol을 보완하고자HTTP Server에서 특정HTTP Client의HTTP Transaction의History를 조회할 수 있는 수단으로 활용
。사용자가 어떤웹사이트를 방문 시HTTP Server에서 할당되는식별번호를 저장하는브라우저의 저장소 파일
▶HTTP Server가 아닌,브라우저에쿠키를 저장.
▶ 。만료기간이 존재하는4kb용량제한이 존재하는key-value저장소.
。HTTP는Stateless하여HTTP Request는 요청한 사용자 정보에 대한State를 포함하지 않으므로,브라우저의식별번호를 포함한Cookie를HTTP Request의헤더에 포함하여HTTP Server로 전송함으로써HTTP Server측에서 사용자의 신원을 파악
▶HTTP Server는 각각의브라우저에 할당한식별번호를서버 백엔드 DB를 통해인덱싱함으로써 특정브라우저의History을 조회
。Cookie File에식별번호를 할당 후 장시간이 지난 이후에도브라우저에서식별번호를 포함하여HTTP Request하는 경우HTTP Server의백엔드 DB에서 삭제하지 않는 한 여전히브라우저에 대한 정보를 유지할 수 있다.
Cookie의 주요용도
- User Session State
。사용자의HTTP Session을 유지
▶Server에 로그인 시HTTP Request에Cookie Header Line를 포함하여 전송하면사용자 세션 시간동안브라우저를HTTP Server가 식별하면서로그인유지
- 장바구니
。브라우저에 할당한식별번호를서버 백엔드 DB를 통해인덱싱함으로써브라우저에게 장바구니 등의 기능을 제공
- Recommendation
。식별번호에 해당하는브라우저의 구매정보를 조회함으로써 상품 추천이 가능
Cookie주요요소
HTTP Response Message의HTTP Header의Cookie Header Line
。Set-cookie : 쿠키식별번호
HTTP Request Message의HTTP Header의Cookie Header Line
。cookie : 쿠키식별번호
HTTP Client의브라우저에서 보관되는Cookie File
。Client Host의State를 유지
。HTTP Server에서 전송한식별번호를Server Host Name과 함께 저장
HTTP Server의백엔드 DB
。식별번호로브라우저의History를 인덱싱
Cookie원리
。브라우저에서 초기HTTP Server접속 시HTTP Server에서 해당브라우저에 대한식별번호를 할당 후브라우저는Cookie File에 해당식별번호를 포함
▶ 이후HTTP Request에Cookie Header Line을 포함하여HTTP Server에 전송 시서버 백엔드 DB를 통해식별번호를인덱싱하여 해당브라우저의 접속기록을 조회
- 사용자가
Client의웹브라우저를 통해웹페이지를 요청하기위해 우선Amazon 웹서버에HTTP Request Message전송
。이때. 해당웹브라우저로는Amazon 웹서버에 처음 방문하고,Ebay 웹서버는 이미 방문한적이 있다고 가정
Amazon 웹서버에서HTTP Request를 수신 시 송신한브라우저에 대한 유일한식별번호를 생성 및백엔드 DB에Entry생성
。해당식별번호를 통해 차후백엔드 DB에서인덱싱을 수행
Amazon 웹서버에서 해당식별번호를HTTP Response Message에HTTP Header로서Set-cookie : 식별번호를 포함하여 해당하는브라우저로 응답
ex )Set-cookie : 1678
HTTP Response Message수신 시브라우저의Cookie File에Server Host name과Set-cookie : 식별번호를 추가
。이를 통해 현재브라우저는Amazon 웹서버와Ebay 웹서버의Entry를 보유한 상태
브라우저에서 해당웹페이지를 요청하고자HTTP Request Message의헤더에Cookie : 식별번호를 포함 후Amazon 웹서버로 요청
。브라우저는Cookie File을 참조하여Server에 대한식별번호를 발췌 후HTTP Request Message에식별번호를 포함하는Cookie를 포함
Amazon 웹서버에서 해당식별번호를백엔드 DB에서인덱싱함으로써 해당브라우저의 할도을 추적가능
。Amazon의 경우 해당식별번호에 해당하는브라우저의웹페이지방문기록을 조회할 수 있고, 회원가입을 하지 않더라도장바구니등의 서비스를 제공가능
- Cookie 종류
Session Cookie
。만료시간(Expire data)를 설정 및메모리에만 저장.
。Browser 종료 시 Cookie를 삭제.
Persistent Cookie
。장기간 유지되는 Cookie.
。파일로 저장되어 Browser 종료와 관계없이영속적으로 존재
Secure Cookie
。HTTPS에서만 사용.
。cookie 정보가 암호화되어 전송.
Third-Party Cookie
。방문 domain 및 다른 domain의 cookie( ex. 광고 배너 )등을 관리 시 유입경로를 추적하기위해 사용.
세션(Http session)
。브라우저와Server간의 송수신 연결상태를 유지할 수 있는 방법을 정의
ex)웹서버에 로그인 시, 새로고침하거나 브라우저를 닫았다 열어도 일정 기간은로그인 유지되어있는데, 이처럼연결상태 유지할수잇게 하는것이Session
。HTTP는세션을 구현하므로로그인 인증을 유지하지만FTP의 경우세션을 구현하지 않으므로 매요청마다 인증을 수행해야한다.
。Cookie와 다르게,HTTP Client가 아닌HTTP Server측에서 저장하여 관리하는 정보.
▶HTTP Session id를 식별자로 구별하여 접속한 Server의백엔드 DB에 정보를 저장.
- Http Session 절차 출처
。HTTP Client가HTTP Server에 Resource를 요청.
。HTTP Server에서는Http Request에 포함된Cookie에서Session id를 확인 후 없을 경우, 새로 발행한Session-id를HTTP Response Message의Cookie Header Line인Set-Cookie에 포함하여 응답
。Client는Http Request Message의Cookie Header Line인Cookie에Session id를 포함하여 원하는 Resource를 요청
。Server는세션저장소에서HTTP Request에 포함된Session id를 통해 해당Session을 찾은 후 상태정보를 유지하며 request에 대한 response를 전송.
토큰 (
token)
。Client-side에서 인증정보를 보관하는 방법.
▶ Server가 아닌, 인증정보를client-side에 암호화하여 저장.
。Session기반 인증방식은 Client에서 Server에 특정 User에 대한 정보를 요청할때마다 일일이Session id의 일치여부를 확인.
▶ 매 요청마다 Server의 DB를 일일이 확인하는것이 부담이되므로Token기반 인증방식이 등장하여 단순히인즌 헤더에 포함된토큰에 대해 해당서버로부터의 발급여부와 유효여부에 대해서만 검증만 수행
- JSON 토큰 (
JWT: Json Web Token ) :
。Web에서Authentication과 정보교환 등을 수행하기위해 사용하는Token기반 인증 방식.
。로그인 후 Server가 Client에게 발급하는Token으로 활용
▶이후 Client에서 전송하는HTTP Request마다JWT를 포함하여 인증을 수행.
。Client가Token을 보관하면서Stateless특징을 지니므로,Session이 필요없다.
▶ 또한Session처럼 DB 조회없이token만으로 Authenticate가 가능.
。JWT의payload에 사용자 정보를 보관 가능.