SOP(Same-Origin Policy)는 같은 출처의 리소스만 공유가 가능하다는 정책이다.
여기서 출처란 프로토콜, 호스트, 포트의 조합으로, 이 중 하나라도 다르면 동일한 출처로 보지 않는다.
어떤 출처에서 가져온 문서, 스크립트 등을 다른 출처의 리소스와 상호작용하는 것을 막는다.
이를 통해 잠재적으로 해로울 수 있는 문서, 스크립트를 분리함으로써 공격받을 수 있는 경로를 줄인다.
예를 들어 로그인과 관련한 리소스를 가진 사용자가 그 리소스를 노리는 스크립트가 있는 사이트에 방문했다.
이 사용자는 SOP가 아니라면 그 리소스를 악용당할 여지가 있다는 것이다.
이러한 이점으로 거의 모든 브라우저가 SOP를 채택하고 있다.
하지만, WEP API를 사용하는 등 출처가 다른 리소스를 사용할 일이 너무나도 많다.
CORS(Cross-Origin Resource Sharing - 교차 출처 리소스 공유)는 추가적인 HTTP 헤더를 사용하여
다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 할 수 있다.
이를 통해 브라우저는 기본적으로 다른 출처의 리소스를 차단하지만, 권한을 부여함으로 상호작용할 수 있다.
CORS 요청은 3가지 방법이 있다.
이는 실제 요청을 보내기 전에 권한을 확인하기 때문에 처음부터 보내는 것보다 효율적이다.
CORS에 대한 조치가 없더라도 프리 플라이트 요청을 통해 먼저 접근 권한을 확인한다면 CORS 에러를 띄운다.
프론트 측 요청 헤더 withCredentials : true
서버 측 응답 헤더 Access-Control-Allow-Credentials : true
서버 측에서 Access-Control-Allow-Origin 을 설정할 때, 모든 출처를 허용한다는 뜻의 와일드카드(*)로 설정하면 에러가 발생한다. 정확한 출처를 적는다.