CORS는 웹 브라우저에서 실행되는 스크립트가 다른 도메인의 자원에 접근할 때 발생하는 보안 기능입니다. 웹 브라우저는 보안상의 이유로 동일 출처 정책(Same-Origin Policy)을 따르는데, 이는 다른 도메인에서 리소스를 요청하는 것을 제한합니다. 만약 서로 다른 도메인에서 데이터를 주고받아야 하는데, 서버 측에서 CORS 헤더가 적절히 설정되지 않은 경우, 브라우저는 요청을 차단하고 CORS 에러를 발생시킵니다.
서로 다른 도메인에 위치한 웹 애플리케이션에서 API에 접근하려고 할 때.
XMLHttpRequest 또는 Fetch API를 사용해 다른 도메인의 리소스를 요청할 때.
CORS 에러 해결 방법:
API 서버에서는 요청을 허용할 도메인을 명시하는 CORS 헤더를 응답에 포함시켜야 합니다.
예를 들어, 모든 도메인에서의 요청을 허용하려면 다음과 같이 설정할 수 있습니다:
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: http://example.com
서버 프레임워크나 미들웨어를 사용하여 CORS 정책을 간편하게 설정할 수 있습니다.
Express를 사용하는 경우 cors 미들웨어를 설치하고 적용할 수 있습니다.
npm install cors
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors());
만약 요청이 사용자의 인증 정보를 포함한다면, 서버는 Access-Control-Allow-Credentials 헤더를 true로 설정해야 합니다.
Access-Control-Allow-Credentials: true
서버에서 모든 HTTP 메서드 및 헤더, 요청을 허용하도록 설정하려면 Access-Control-Allow-Methods 및 Access-Control-Allow-Headers 헤더를 사용합니다.
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
특정 타입의 요청에 대한 사전 검사(preflight) 요청에 응답하기 위해 서버에서는 OPTIONS 메서드를 허용하도록 설정해야 합니다.
Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, DELETE
이러한 방법들을 통해 서버 측에서 CORS 정책을 적절히 설정하여 CORS 에러를 해결할 수 있습니다.