CORS Decision Pipeline
CORS는 서버 간 요청 차단이 아니라 브라우저의 응답 공유 판정이다
브라우저는 요청의 Origin과 서버의
Access-Control-*
응답 헤더를 비교해 JavaScript가 응답 본문과 특정 헤더를 읽어도
되는지 결정한다.
Access-Control-Allow-Origin이 요청 Origin과
일치하거나 credentials 없는 요청에서 *여야
한다.
Access-Control-Allow-Credentials: true가 필요하다.
*는 실패한다.
X-Request-Id 같은 헤더는
Access-Control-Expose-Headers에 넣어야 JS가
읽는다.
Vary: Origin을 둔다.
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Credentials: true Vary: Origin
Access-Control-Expose-Headers: X-Request-Id
핵심: simple request도 응답을 읽으려면 실제 응답에
CORS 허가가 필요하다. CORS는 CSRF 방어가 아니며,
Set-Cookie는 JS가 읽는 응답 헤더가 아니라 브라우저 쿠키
처리 규칙의 영향을 받는다.