CORS 설명
Cross-Origin Resource Sharing 완전 가이드 — 작동 방식, 모든 헤더 설명, 일반적인 오류와 해결 방법.
개요
CORS란 무엇인가요?
교차 출처 리소스 공유(CORS)는 서버가 자신의 출처 이외의 모든 출처(도메인, 스킴 또는 포트)에서 브라우저가 리소스 로드를 허용해야 하는 출처를 표시할 수 있는 HTTP 헤더 기반 메커니즘입니다. 브라우저는 기본적으로 동일 출처 정책을 적용하여 페이지를 제공한 출처와 다른 출처로의 요청을 차단합니다.
동일 출처 정책
두 URL이 동일한 스킴(http/https), 호스트, 포트를 공유하면 동일한 출처를 가집니다. 예를 들어, https://app.example.com과 https://api.example.com은 호스트가 다르기 때문에 다른 출처입니다. 동일 출처 정책은 악의적인 사이트가 다른 사이트의 민감한 데이터를 읽는 것을 방지합니다. CORS는 이 제한을 통제된 방식으로 완화하는 메커니즘입니다.
단순 요청 vs. 프리플라이트
"단순 요청"은 GET, HEAD 또는 POST를 CORS 안전 목록의 헤더만으로 사용하며 프리플라이트를 트리거하지 않습니다. 그 외 모든 교차 출처 요청—PUT이나 DELETE 같은 메서드를 사용하거나 Authorization 같은 헤더를 포함하는 요청—은 프리플라이트를 트리거합니다. 브라우저는 실제 요청을 보내기 전에 먼저 OPTIONS 요청을 보내 서버에 권한을 요청합니다.
CORS 작동 방식
단순 요청
브라우저
GET /api/data
Origin: https://app.example.com
Origin: https://app.example.com
↓
서버
200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: *
↓
✓ JS에 응답 공유
프리플라이트 요청
브라우저
OPTIONS /api/data
Access-Control-Request-Method: DELETE
Access-Control-Request-Method: DELETE
↓
서버
204 No Content
Access-Control-Allow-Methods: DELETE
Access-Control-Allow-Methods: DELETE
↓
브라우저
DELETE /api/data
Origin: https://app.example.com
Origin: https://app.example.com
↓
✓ JS에 응답 공유
CORS 헤더
10개 중 10개 표시
일반적인 오류
8개 중 8개 표시