브라우저에 쿠키(Cookie)가 전달되지 않는 문제 해결

bagt13·2023년 1월 16일
1

CS

목록 보기
11/14
post-thumbnail

함께 프로젝트를 진행했던 동료 개발자분이 CORS 설정을 모두 마쳤음에도 불구하고 쿠키가 전달되지 않는 문제를 겪고 계셨다. 정확히 말하면, application tab에서만 확인할 수 없었다.

결론부터 말하자면, 쿠키의 domain이 client domain의 상위 domain이 아니기 때문에 확인할 수 없었던 것이다.


🍪 쿠키(Cookie) 전달 조건

RFC 6265 명세에서 허용하는 범위 안에서는 host가 동일하지 않아도 Cookie에 접근할 수 있다.

자세히 말하면, 특정 도메인으로 발급된 쿠키에 대해 하위 도메인에서는 접근이 가능하다는 명세이다.


❗️ 쿠키를 발급하지 못한 이유

서버에서 Cookie를 발급할 때, 서버는 자기 자신 혹은 상위 도메인만을 Cookie의 Domain 값으로 지정할 수 있다. 따로 지정하지 않는 경우 현재 host(서버 도메인)를 기본값으로 사용한다.

  • 서버 URL이 https://one.two.three.com 인 경우
    • 쿠키 domain : three.com -> 가능
    • 쿠키 domain : two.three.com -> 가능
    • 쿠키 domain : five.com -> 불가능

또한, 쿠키 domain을 three.com으로 지정할 경우, client URL은 three.com(쿠키 도메인)의 서브 도메인이어야 한다.


📗 예시

  • 서버 URL : one.two.three.com

  • 클라이언트 URL : two.three.com

    • set-cookie: cookieKey=cookieValue; Path=/; SameSite=Strict; Domain = three.com;


    이 경우에는 정상적으로 동작한다. 쿠키 도메인은 서버 URL의 상위 도메인이며, 클라이언트 URL은 쿠키 도메인의 하위 도메인이기 때문이다.


✅ 애초에 domain 설계를 잘 하자

위와 같은 사항들을 매번 고려해야 하면 번거로울 것이다. 따라서 애초에 domain을 설계할 때 다음과 같은 규칙으로 설계하는 게 좋아보인다.

  1. client domain을 server domain의 상위 domain으로 설정하고, 쿠키 domain에 client domain을 입력한다.

    • client URL : myapp.com
    • server URL : api.myapp.com
    • cookie Domain : myapp.com

  1. 쿠키 domain을 상위 도메인으로 설정하고, client domain과 server domain을 각각 쿠키 domain의 서브 domain으로 설정한다.

    • client URL : front.myapp.com
    • server URL : back.myapp.com
    • cookie Domain : myapp.com

경우에 따라 적절한 방법을 사용하면 될 것 같다.


동료 개발자분의 경우, 쿠키에 domain에 대한 설정을 따로 하지 않았고, default 값인 서버 URL이 쿠키 domain에 실렸었다. 그리고 클라이언트 URL은 서버 URL의 하위 domain이 아니었기 때문에 쿠키가 전달되지 못했던 것이다. 원인을 찾은 후, 2번 방법으로 해결하셨다.


📃 Reference

https://42place.innovationacademy.kr/archives/8950

profile
주니어 백엔드 개발자입니다😄

0개의 댓글