CORS란 Cross-Origin Resource Sharing의 약자입니다.
HTTP 헤더에 기반한 메커니즘으로 서버가 자신으로부터 제공된 컨텐츠가 아닌 외부에서 제공된 컨텐츠를 허용할지를 나타냅니다.
CORS는 'preflight'에도 의존하는데 'preflight' 요청은 브라우저가 교차 출처 요청을 명시적으로 허용하는지 여부를 확인하기 위한 안전 메커니즘입니다.
아래는 CORS에 대해 보여주는 그림입니다.
그림에서 보이듯이 domain-a.com에서 웹사이트에서 domain-a.com 서버에 대한 요청은 같은 출처이기 때문에 허용되지만 domain-b.com은 다른 출처이기 때문에 제한됩니다.
아래 그림에서와 같이 클라이언트는 요청을 보낼때 헤더의 Origin에 웹 사이트의 출처를 보냅니다.
서버는 Access-Control-Allow-Origin에 접근이 허용되는 출처를 포함하여 보내는데 이때 접근이 허용되는 출처에 포함되지 않은 Origin은 접근이 거부됩니다.
'preflight'를 통해 서버에 클라이언트가 하고자 하는 작업이 가능한지 먼저 묻고 가능하면 실제 요청이 이루어집니다.
CORS문제를 해결하는 방법은 아주 쉽습니다.
앞에서 봤듯이 Access-Control-Allow-Origin에 허용할 출처를 명시해줌으로써 해결이 가능합니다.
그러나 이를 막 사용해서는 안됩니다.
CORS는 서버를 보호하기 위한 정책이며 허용할 출처가 정말 믿을만한 출처지인지 먼저 파악하고 허용해줘야 합니다.