교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 웹 애플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 실행합니다.
mdn
그렇다. 말 그대로,
내 출처(도메인, 프로토콜, 포트)에서 다른 출처(도메인, 프로토콜, 포트)에 있는 자원에 접근할 때 적용되는 규칙이다.
자원의 요청을 아무나 막 하면 안되니까, 이런 정책이 있는것이다.
해당 자원을 가져오고 싶으면 해당자원을 가지고 있는 서버로부터 권한을 부여 받아야 한다.
"preflighted" requests
client : 나 이 요청 너한테 보낼껀데, 괜찮겠니?
server : 음.. foo.example.com 에서 온 요청이군 그래, 가능해,
먼저 해당 요청이 가능한지 요청을 보내는것을 preflighted requests 라고 한다.
cf. preflighte : occurring before a flight in an aircraft. (비행 이륙직전에 일어나는것)
preflighted requests 에서 ok가 떨어지면 이젠 이륙(요청)만 하면 된다.
client : 자원요청
server : ok
서버에게 ok를 받아내는법(권한을 받아야한다.)
서버한테서 자원요청의 권한을 받으려면 서버쪽에서 응답을 보낼때 응답해더에
Access-Control-Allow-Origin 을 추가하면 된다.
Access-Control-Allow-Origin : "허용하는 도메인"
추가적으로 허용가능한 http 메서드와 headers또한 설정이 가능하다.
(Access-Control-Allow-Method , Access-Control-Allow-Headers)
이 설정만 되어있으면 Access-Control-Allow-Origin 에 있는 어떤 도메인이라도 해당 서버에 요청할수가 있다.