프로젝트 중 날 힘들게 한 CORS에 대해 정리한 글
Cross-Origin Resource Sharing의 약자로 우리말로 교차 출처 리소스 공유이다.
말이 어려운데 추가 HTTP 헤더를 이용해 한 출처(origin)에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다.
여기서 출처(origin)란 도메인, 프로토콜, 포트이다.
보안 상의 이유로 브러우저는 요청을 보내는 출처와 받는 출처가 다를 경우 이를 제한한다. 예를들어 example.com에서 hi.com으로 HTTP요청을 보낼 경우 보안 상의 이유로 브라우저가 이 요청을 제한한다.
웹 애플리케이션은 자신의 출처와 동일한 리소스만 불러올 수 있고, 다른 출처의 리소르를 불러오려면 그 출처에서 올바른 CORS 헤더를 포함한 응답을 반환해야 한다.
여기서 SOP에 대해 잠시 알아보자.
SOP은 2011년, RFC 6454에서 처음 등장한 보안 정책으로 '같은 출처에서만 리소스를 공유할 수 있다'라는 규칙을 가진 정책이다.
웹이라는 오픈스페이스라는 환경 특성상 무작정 SOP만 지키라고 할 수 없다. 그래서 예외 조항을 둔게 'CORS 정책을 지킨 리소스 요청'이다.
우리가 다른 출처로 리소스를 요청한다면 SOP 정책을 위한한 거이고, SOP 예외 조항인 CORS 정책까지 지키지 않으면 다른 출처의 리소스를 사용할 수 없게 된다.