- CORS (Cross-Origin Resource Sharing)
- 교차 출처 리소스 공유. W3C 표준으로, 새로운 HTTP 헤더 필드를 추가하여 서버가 어떤 출처의 리소스 접근을 허용하는지 선언하게 합니다. 현대 브라우저에서 교차 출처 문제를 해결하는 공식 솔루션입니다.
- 동일 출처 정책 (Same-Origin Policy)
- 브라우저 핵심 보안 메커니즘. 프로토콜, 도메인, 포트가 모두 완전히 동일해야 동일 출처로 간주하며, 다른 출처의 JavaScript는 기본적으로 상대방 리소스를 읽을 수 없습니다.
- preflight 요청 (Preflight Request)
- 브라우저가 비단순 교차 출처 요청에 대해 자동으로 먼저 보내는 OPTIONS 메서드 요청. 서버에 후속 실제 요청을 허용하는지 물어보며, preflight 통과 후에만 실제 요청을 보냅니다.
- 단순 요청 (Simple Request)
- 특정 조건(GET/HEAD/POST 메서드, 안전 헤더만 포함, 특정 Content-Type)을 충족하는 교차 출처 요청. preflight를 보내지 않고 직접 실제 요청을 보냅니다.
- Access-Control-Allow-Origin (ACAO)
- CORS 핵심 응답 헤더. 리소스 접근을 허용하는 출처를 지정하며 구체적인 출처 URI 또는 와일드카드 *를 사용할 수 있습니다. 자격 증명 포함 시 *를 사용할 수 없습니다.
- Access-Control-Allow-Methods (ACAM)
- preflight 응답 헤더. 서버가 지원하는 모든 HTTP 메서드를 나열하며 여러 메서드는 쉼표로 구분합니다.
- Access-Control-Allow-Headers (ACAH)
- preflight 응답 헤더. 서버가 허용하는 모든 요청 헤더 필드를 나열합니다. 프론트엔드가 사용자 정의 헤더를 전송한다면 여기에 반드시 선언해야 합니다.
- Access-Control-Allow-Credentials (ACAC)
- 응답 헤더. 부울 값 true는 교차 출처 요청에 Cookie, Authorization 등 자격 증명을 포함하도록 허용함을 의미합니다. 이 경우 Allow-Origin은 *가 될 수 없습니다.
- Access-Control-Max-Age (ACMA)
- preflight 응답 헤더. preflight 결과 캐시 시간(초)을 지정합니다. 합리적으로 설정하면 OPTIONS 요청을 줄여 성능을 향상시킬 수 있습니다.
- Vary: Origin
- 응답 헤더. CDN/프록시에 이 응답 내용이 Origin에 따라 달라짐을 알려주며, 캐시 시 Origin을 캐시 키의 일부로 사용하게 하여 교차 출처 응답 캐시 오염을 방지합니다.
- CORS 안전 목록 요청 헤더 (CORS-safelisted request headers)
- Allow-Headers에 선언하지 않아도 전송할 수 있는 요청 헤더로 Accept, Accept-Language, Content-Language, Content-Type(특정 값) 등이 포함됩니다.
- 금지된 요청 헤더 이름 (Forbidden header name)
- 브라우저가 JavaScript가 프로그래밍 방식으로 설정하는 것을 금지하는 요청 헤더로 Host, Connection, Cookie, Origin 등이 있습니다. 이러한 헤더는 브라우저가 자동으로 제어합니다.
- 자격 증명 요청 (Credentialed Request)
- Cookie, HTTP 인증 정보, TLS 클라이언트 인증서 등 신원 자격 증명을 포함하는 교차 출처 요청. 프론트엔드와 백엔드가 withCredentials와 Allow-Credentials를 함께 설정해야 합니다.
- Access-Control-Expose-Headers
- 응답 헤더. 프론트엔드 JavaScript가 접근할 수 있는 응답 헤더를 나열합니다. 기본적으로 소수의 기본 헤더만 접근할 수 있으며 사용자 정의 응답 헤더는 여기에 반드시 선언해야 합니다.
- OPTIONS 메서드
- HTTP 메서드 중 하나로 서버가 지원하는 통신 옵션을 가져오는 데 사용됩니다. CORS는 이를 사용하여 preflight 요청을 보내 서버가 허용하는 메서드, 헤더, 자격 증명 등을 물어봅니다.
- Origin 요청 헤더
- 브라우저가 자동으로 추가하는 요청 헤더로 현재 요청이 어떤 출처(프로토콜+도메인+포트)에서 오는지 나타냅니다. 서버는 이 헤더를 기반으로 교차 출처 허용 여부를 판단합니다.
- crossorigin 속성
- HTML 요소(script, img, link 등)의 속성으로 CORS를 사용하여 리소스를 로드할지 여부를 지정합니다. 값은 anonymous(자격 증명 미포함)와 use-credentials(자격 증명 포함)가 있습니다.
- no-cors 요청 모드
- fetch API의 한 mode로 교차 출처 요청을 보낼 수 있지만 단순 요청만 보낼 수 있고 JavaScript가 응답 내용을 읽을 수 없습니다. 불투명 요청(Opaque Response)을 보내는 것과 같습니다.