CORS 에러
Updated: 2025-04-10
weekly
CORS 에러
CORS(Cross-Origin Resource Sharing) 에러는 웹 애플리케이션 개발 시 자주 발생하는 문제 중 하나입니다. 이 에러는 보안상의 이유로 브라우저가 다른 출처(origin)의 리소스에 접근하는 것을 제한할 때 발생합니다.
CORS 에러 발생 원인
웹 브라우저는 보안상의 이유로 동일 출처 정책(Same-Origin Policy)을 따릅니다. 동일 출처 정책은 브라우저가 스크립트에서 다른 출처의 리소스에 접근하는 것을 기본적으로 차단합니다.
여기서 출처는 프로토콜, 호스트, 포트를 조합한 것을 의미합니다. 예를 들어, http://example.com과 https://example.com은 프로토콜이 다르므로 다른 출처로 간주됩니다.
CORS 에러는 다음과 같은 상황에서 발생합니다.
- 다른 도메인: 웹 애플리케이션이 다른 도메인의 API에 요청을 보낼 때
- 다른 포트: 웹 애플리케이션이 같은 도메인의 다른 포트에서 실행되는 API에 요청을 보낼 때
- 다른 프로토콜: 웹 애플리케이션이 HTTP에서 HTTPS로 또는 그 반대로 요청을 보낼 때
CORS 에러 해결 방법
CORS 에러를 해결하는 방법은 크게 서버 측 설정과 클라이언트 측 설정으로 나눌 수 있습니다.
서버 측 설정
가장 일반적인 해결 방법은 서버에서 CORS 헤더를 설정하는 것입니다. 서버에서 Access-Control-Allow-Origin 헤더를 설정하여 허용할 출처를 명시적으로 지정할 수 있습니다.
Access-Control-Allow-Origin: *: 모든 출처를 허용합니다. (보안상 권장되지 않음)Access-Control-Allow-Origin: http://example.com: 특정 출처만 허용합니다.Access-Control-Allow-Methods: 허용할 HTTP 메서드를 지정합니다. (예: GET, POST, PUT, DELETE)Access-Control-Allow-Headers: 허용할 HTTP 헤더를 지정합니다. (예: Content-Type, Authorization)Access-Control-Allow-Credentials: 쿠키 또는 인증 정보를 허용할지 여부를 지정합니다.
클라이언트 측 설정
클라이언트 측에서 CORS 에러를 해결하는 방법은 다음과 같습니다.
- 프록시 서버 사용: 클라이언트와 서버 사이에 프록시 서버를 두어 요청을 중계합니다. 프록시 서버는 동일 출처 정책을 우회하여 다른 출처의 리소스에 접근할 수 있습니다.
- JSONP 사용:
script태그를 사용하여 다른 출처의 스크립트를 로드하는 JSONP(JSON with Padding)를 사용할 수 있습니다. JSONP는 GET 요청만 지원하고, CORS 헤더를 설정할 수 없는 경우에 유용합니다. - 브라우저 확장 프로그램 사용: 브라우저 확장 프로그램을 사용하여 CORS 제한을 우회할 수 있습니다. 하지만 이 방법은 보안상의 위험이 있으므로 신뢰할 수 있는 확장 프로그램만 사용해야 합니다.
용어 정리:
- CORS: '교차 출처 리소스 공유(Cross-Origin Resource Sharing)'의 약자입니다. 웹 페이지에서 다른 도메인의 리소스를 요청할 때 발생하는 보안 문제를 해결하기 위한 표준입니다.
- 프록시 서버: 클라이언트와 서버 사이에서 중개자 역할을 하는 서버. 클라이언트가 서버에 직접 요청을 보내는 대신, 프록시 서버를 통해 요청을 보내고, 프록시 서버는 서버로부터 받은 응답을 다시 클라이언트에게 전달합니다.
