포도가게의 개발일지
[Web] Cookie 본문
HTTP Cookie?
- 웹 쿠키는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각입니다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재요청시 저장된 데이터를 함께 전송합니다. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용합니다(음.. 우리는 cookie를 이용하여 동일한 access인지 확인하여 auth를 해준다.). 이를 이용하면 사용자의 로그인 상태를 유지할 수 있습니다. stateless인 http에서 상태정보를 기억할수 있게 됩니다.
쿠키의 세가지 목적
- 세선 관리
- 개인화
- 트래킹
과거에는 클라이언트 측에 정보를 저장할 때 쿠키를 주로 사용했습니다. 유일한 방법이었기 때문에 하지만 지금은 modern storage api를 사용해 정보를 저장하는 걸 권장합니다. 이유는 모든 요청마다 쿠키가 함께 전송되기 때문에 성능이 떨어지는 원인이 될 수 있습니다.
modern storage api(local storage , session storage)가 있습니다.
서버는 http request를 수신할 때, 응답에 set-cookie 헤더를 전송하여 쿠키를 브라우저에 저장할수있습니다. 그 이후에 쿠키는 동일한 서버 요청시 header ㅇㅔ 포함되어 전송됩니다.(동일한 도메인 기준인가 아니면 서버를 나누는 기준이 따로있나?)
Secure 쿠키는(secure: true) https 프로토콜 상에서 암호화된 경우에만 전송됩니다. 하지만 쿠키는 본질적으로 안전하지 않아 정말 민감한 정보는 저장되지 말아야합니다. http 웹사이트는 secure cookie 설정을 사용할 수없습니다.
httpOnly 설정 쿠키는 javascript의 document.cookie api를 이용하여 접근할 수 없습니다. 해당 쿠키들은 서버에 전송되기만 합니다.
domain과 path 디렉티브는 쿠키의 스코프를 정의합니다. 어떤 url에 쿠키를 보내야하는지, Domain은 쿠키가 전송되게 될 호스트들을 명시합니다. 도메인이 명시되면, 서브도메인들은 항상 포함됩니다. 만약 Domain=mozilla.ori이 설정되면, 쿠키들은 developer.mozilla.org와 같은 서브도메인 상에 포함되게 됩니다. 도메인 문자열은 문자열의 접미사입니다. 문자열의 마지막 캐릭터는 .입니다 그리고 마지막 캐릭터는 도메인에 포함되지않습니다. 쿠키가 별도로 명시된 domain이 없다면 기본값으로 쿠키를 보낸 서버의 도메인으로 설정됩니다. 쿠키에 접근 가능한 도메인을 지정한다.
-> 스크립트에서 쿠키를 설정한 경우에 만들어지는 쿠키는 현재 페이지의 도메인에 속하게 됩니다. 스크립트의 유래와 상관없이
path는 cookie 헤더를 전송하기 위하여 요청되는 url 내에 반드시 존재해야 하는 경로입니다. 만약 Path=/docs이 설정되면 다음의 경로들에는 모두 매치됩니다.
- /docs
- /docs/web
- /docs/web/http
Samesite 쿠키는 쿠키가 cross-site 요청과 함께 전송되지 않았음을 요구하게 만들수 있습니다. 아직 모든 브라우저에 의해 제공되지 않고 있습니다. 실험적인 기능
first party 쿠키는 쿠키 도메인이 현재 보고있는 페이지의 도메인과 동일하다
third party 쿠키는 쿠키 도메인과 현재 보고있는 페이지의 도메인이 다른경우
2016 구글 크롬은 3가지의 samesite 속성을 소개했다. strict, lax, none.
- strict 속성은 크로스 사이트 요청에는 항상 전송되지 않습니다.
- lax : 대체로 서드파티 쿠키는 전송되지 않지만, 몇가지 예외적인 요청에는 전송됩니다.
- none : 크로스 사이트 요청의 경우에도 항상 전송됩니다. 반드시 해당 쿠키는 secure 쿠키여야 합니다. 앞서 말했듯이 암호화된 요청에만 전송되는 쿠키입니다.
크롬은 장기적으로 서드 파티 쿠키에대한 지원을 단계적으로 제거할 예정입니다. 결국 모든 쿠키가 samesite=strict로 설정된 것처럼 동작하게 된다는 의미입니다.
구글은 이 문제를 해결하기 위해서 first-party sets라는 표준을 제안했습니다. first-party sets은 여러개의 도메인을 동일한 사이트로 다룰 수 있도록 만드는 기술입니다. 하지만 아직 표준으로 합의되지 않았.... 앞으로 점점 더 쿠키를 사용하기 까다로워 질거라는 사실..
'웹' 카테고리의 다른 글
[Web] Webhook? (0) | 2022.04.09 |
---|---|
[Web] Blob (0) | 2022.03.26 |
[Web] SSE(Server Sent Event) (0) | 2022.03.26 |
Restful API? (0) | 2022.01.18 |
Socket vs WebSocket vs Socket.IO? (0) | 2021.11.26 |