CORS
CORS는 웹 보안 기능 중 하나로, 웹 페이지가 현재 도메인 이외의 도메인에서 리소스 요청을 제어하기 위한 메커니즘입니다. 이는 웹 애플리케이션이 동일 출처 정책(Same-Origin Policy)에 의해 보호받을 수 있도록 해줍니다. 동일 출처 정책은 보안을 위해 스크립트가 다른 출처의 리소스를 불러오는 것을 막는 정책입니다. 하지만 웹 애플리케이션이 여러 출처에 있는 리소스에 접근해야 할 필요가 있을 때, CORS를 사용하여 이를 허용할 수 있습니다.
CORS의 작동 방식
CORS는 서버와 클라이언트 간의 HTTP 헤더를 통해 설정됩니다. 주로 서버에서 특정 출처(origin)의 요청을 허용하도록 설정합니다. 주요 CORS 관련 헤더는 다음과 같습니다.
-
Access-Control-Allow-Origin
: 서버가 응답 시, 요청을 허용할 출처를 이 헤더에 명시합니다. 예를 들어,Access-Control-Allow-Origin: https://example.com
은 특정 출처만 요청을 허용하고,Access-Control-Allow-Origin: *
는 모든 출처의 요청을 허용합니다. -
Access-Control-Allow-Methods
: 서버가 지원하는 HTTP 메서드를 명시합니다. 예를 들어,GET
,POST
,PUT
,DELETE
등이 있습니다. -
Access-Control-Allow-Headers
: 서버가 허용하는 HTTP 헤더를 명시합니다. 클라이언트가 보낼 수 있는 헤더를 지정할 수 있습니다. -
Access-Control-Allow-Credentials
: 자격 증명(쿠키, 인증 헤더 등)을 포함한 요청을 허용할지 여부를 결정합니다. 이 헤더가true
로 설정되면, 클라이언트는 요청에 자격 증명을 포함시킬 수 있습니다. -
Access-Control-Expose-Headers
: 클라이언트가 접근할 수 있는 응답 헤더를 명시합니다. -
Access-Control-Max-Age
: 사전 요청(preflight request)의 결과를 캐시할 수 있는 시간을 지정합니다.
CORS 요청 유형
단순 요청(Simple Requests):
다음 조건을 모두 만족하는 요청을 말합니다.
- HTTP 메서드가
GET
,POST
, 또는HEAD
중 하나입니다. - 사용되는 헤더가
Accept
,Accept-Language
,Content-Language
,Content-Type
중 하나이며,Content-Type
이application/x-www-form-urlencoded
,multipart/form-data
, 또는text/plain
인 경우.
사전 요청(Preflight Requests):
단순 요청이 아닌 경우, 브라우저는 실제 요청을 보내기 전에 OPTIONS
메서드를 사용하여 사전 요청을 보냅니다. 이 요청은 서버가 실제 요청을 허용할 수 있는지를 확인하기 위한 것입니다.
CORS 설정 시 주의점
보안:
모든 출처를 허용하는 Access-Control-Allow-Origin: *
설정은 편리하지만, 보안에 취약할 수 있습니다. 민감한 데이터를 다루는 경우, 특정 출처만 허용하는 것이 좋습니다.
서버 설정:
CORS를 올바르게 설정하려면 서버 쪽에서 헤더를 적절히 반환해야 합니다. 각 서버 환경(예: Nginx, Apache, Node.js 등)에 맞는 설정이 필요합니다.