CORS(Cross-Origin Resource Sharing)는 웹 브라우저에서 발생하는 보안 상의 이슈를 다루기 위한 메커니즘입니다. 웹 애플리케이션은 보안상의 이유로 동일한 출처(Same-Origin)에서만 리소스에 접근할 수 있도록 제한이 되는데, CORS는 서로 다른 출처 간의 리소스 공유를 허용하기 위한 정책을 정의하고 구현하는 것입니다.
각 출처는 프로토콜(프로토콜명), 호스트(도메인 또는 IP 주소), 포트로 정의됩니다. 예를 들어, http://example.com:80과 http://anotherdomain.com:8080은 서로 다른 출처입니다.
CORS 정책을 통해 웹 애플리케이션이 다른 출처의 리소스에 접근하는 것을 제어할 수 있습니다. 브라우저에서는 이러한 보안 정책을 따르며, 다음과 같은 상황에서 CORS 정책이 적용됩니다:
Cross-Origin HTTP 요청: 웹 애플리케이션이 다른 출처의 리소스에 HTTP 요청을 보내는 경우, 브라우저는 해당 요청이 안전한지 확인하고 CORS 정책을 적용합니다. 일반적으로, 다른 출처의 리소스를 요청하는 경우에는 브라우저에서 CORS 헤더를 검사하게 됩니다.
CORS 헤더: 서버는 응답에 CORS 관련 헤더를 포함시켜야 합니다. 주요 CORS 헤더로는 Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers, Access-Control-Allow-Credentials 등이 있습니다.
Preflight 요청: 브라우저는 복잡한 요청(특정 HTTP 메서드나 특정 컨텐츠 타입 등을 사용하는 요청)을 전송하기 전에 "Preflight" 요청을 보냅니다. 서버는 Preflight 요청을 받아서 해당 요청을 수용할 수 있는지 확인한 후, 본래 요청을 허용하거나 거부합니다.
CORS를 구현할 때 주의할 점은 보안을 위해 필요한 것이지만, 서버 측과 클라이언트 측 양쪽에서의 설정이 필요하다는 점입니다. 서버는 CORS 정책을 적절히 설정하고 응답 헤더를 추가해야 하며, 클라이언트 측에서는 요청을 보내는 방식에 따라 Preflight 요청 등을 고려하여 코드를 작성해야 합니다.