교차 출처 리소스 공유(CORS, Cross-Origin Resource Sharing)는 서버의 HTTP 응답 헤더를 바탕으로 브라우저가 다른 출처의 응답을 웹 스크립트에 공유할지 판단하는 메커니즘입니다. 출처(origin)는 URL의 스킴·호스트·포트로 구분하므로, 같은 도메인 계열이어도 호스트나 포트가 다르면 다른 출처일 수 있습니다.
CORS 오류가 표시되어도 프리플라이트가 필요 없는 요청은 이미 서버에 전달됐을 수 있습니다. 서버의 인증·인가와 CSRF 방어를 별도로 설계해야 하며, CORS 설정만으로 외부 프로그램의 API 호출을 차단할 수는 없습니다.
기본 개념과 출처 구분
-
교차 출처 리소스 공유 (CORS) — MDN · 한국어
단순 요청과 프리플라이트, 요청·응답 헤더와 쿠키를 포함한 교차 출처 요청의 흐름을 설명합니다.
-
동일 출처 정책 — MDN · 한국어
브라우저가 출처를 비교하는 기준과 교차 출처의 읽기·쓰기·삽입에 적용하는 제한을 설명합니다.
-
Site — MDN · 영문
CORS의 origin과 쿠키의 SameSite에서 사용하는 site의 차이를 등록 가능 도메인·스킴·포트의 예로 설명합니다.
프리플라이트와 응답 헤더
-
브라우저가 필요한 경우 OPTIONS 사전 요청으로 사용할 메서드·헤더의 허용 여부를 확인한 뒤 실제 요청을 보내는 과정을 설명합니다.
-
Access-Control-Allow-Origin header — MDN · 영문
허용할 출처 지정, 인증 정보를 포함한 요청에서의 와일드카드 제한과 출처별 응답 캐시를 위한 Vary: Origin을 설명합니다.
-
Access-Control-Allow-Credentials header — MDN · 영문
쿠키 등 인증 정보를 포함한 요청에서 클라이언트의 credentials 설정과 서버의 응답 허용 헤더가 맡는 역할을 설명합니다.
설정과 오류 확인
-
CORS errors — MDN · 영문
개발자 도구에서 CORS 오류 원인을 확인하고 누락된 헤더·출처 불일치·프리플라이트 실패 등을 구분하는 방법을 안내합니다.
-
cors middleware — Express · 영문
경로별·출처별 CORS 응답 설정과 프리플라이트 처리 방법을 보여주며, CORS가 서버의 접근 제어를 대신하지 않는다는 점을 설명합니다.
-
Fetch Standard의 CORS protocol — WHATWG · 영문
CORS 프로토콜의 요청·응답 헤더, 인증 정보와 공유 여부 판정에 관한 표준을 확인할 수 있습니다.