전송프로토콜
https http 그리고 set-cookie의 secure
개발하는지호
2024. 8. 5. 16:44
크롬에서 작업 중에, 특정 도메인에서 한 번 https로 접근시, 포트를 변경하더라도 http로 접근하면 세션이 발급 안 되는 이슈가 있었다.
그 이유는 한 번 https로 접근하게 되면 set-cookie에 'secure' 라는 것이 같이 오기 때문이다.
즉, 크롬은 https로 시도한 도메인을 cookie에 저장해 두고, https로 요청을 보낼 시에 자신이 가지고 있는 cookie의 세션을 헤더에 담아 보낸다.
하지만, http로 보내게 되면 크롬은 세션을 백으로 보내지 않는 상황이 발생하게 되고 그로 인해 백은 세션이 없다고 판단하여 세션을 재발급 하지 않는다.
*여기서 스프링에 세션 발급을 'false'로 해놓았을 것이다. 이는 필요할 때만 발급한다는 의미이다. 이것에 대해 더 공부해보면 좋을 것 같다.
그래서 찾아 본 결과,
스프링 2.2 이전
server.ssl.enabled=true
server.servlet.session.cookie.secure=true
~~
스프링 2.2 이후
server.ssl.enabled=true
~~
2.2 버전 이후로는 아래의 설정이 없더라도 ssl.enabled=true 이면 세션 발급시 secure이 추가가 된다.
server.servlet.session.cookie.secure=true
이러한 결과를 얻을 수 있었다.
결과적으로,
크롬에서는 포트 상관 없이 특정 도메인에서 한 번 이상 https로 접근하게 된다면 쿠키에 secure가 셋팅이 되고 그 이후로는 https로 보내지 않는다면 포트 상관없이 세션이 생기지 않는 오류가 나타난다.
이를 해결하고 싶다면, edge 브라우저를 이용 또는 크롬의 쿠키를 한 번 날려주고 http 로 접근해주면 해결할 수 있다.