CORS-safelisted Request
Simple request는 응답 허가가 아니라 preflight를 생략하는 조건이다
메서드, 요청 헤더 이름과 값, body 특성이 safelist에 들어오면
브라우저는
OPTIONS 확인 없이 actual request를 보낼 수 있다. 그래도
응답을 JavaScript가 읽으려면 실제 응답의 CORS 허가가 필요하다.
Accept
Accept-Language
Content-Language
Content-Type
Range
application/x-www-form-urlencoded
multipart/form-data
text/plain
text/plain;charset=UTF-8처럼 parameter가 붙어도
essence가 기준이다.
Range: bytes=0-499처럼 한 구간이어야 한다.
Authorization
직접 붙이면 safelist 밖이다. preflight 응답의
Access-Control-Allow-Headers: Authorization이
필요하다.
application/json
JSON POST는 safelisted Content-Type이 아니므로 OPTIONS 확인이
먼저 필요하다.
쿠키 포함은 preflight 조건 자체가 아님
하지만 응답 공유에는 명시 origin과
Access-Control-Allow-Credentials: true가 필요하고
wildcard origin은 실패한다.
simple이어도 ACAO 필요
실제 요청은 바로 갈 수 있지만, 응답에 적절한
Access-Control-Allow-Origin이 없으면 JS는 읽지
못한다.
정리: simple request는 "서버가 아무 허가 없이 응답을 공유한다"는 뜻이 아니다. 브라우저가 preflight를 생략할 뿐이며, CORS 응답 헤더 판정과 CSRF 방어는 여전히 별개로 설계해야 한다.