CORS(Cross-Origin Resource Sharing) Preflight Request
브라우저에서 일반적인 요청이 아닐 경우에 Preflight Request라는 예비 요청을 보내 접근 권한이 있는지 확인합니다. 만약 서버에서 Preflight Request을 허용하지 않으면 CORS(Cross-Origin Resource Sharing) 문제가 발생할 수 있습니다.
일반적인 요청의 조건은 아래와 같으며 Authorization 헤더나 text/xml, application/json를 사용하면 일반 요청이 아니게 됩니다.
- 요청의 메소드는 GET, HEAD, POST 중 하나여야 한다.
- Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width를 제외한 헤더를 사용하면 안된다.
- Content-Type은 application/x-www-form-urlencoded, multipart/form-data, text/plain만 허용된다.
CORS(Cross-Origin Resource Sharing)는 다른 출처의 리소스를 공유할 때 지켜야될 정책이고 브라우저에 구현된 스펙입니다. 다른 출처를 판단하는 기준은 scheme/host/port 세 가지입니다. (RFC 6454)
Preflight Request은 브라우저가 본 요청을 보내기 전에 예비 요청을 보내는 것으로 OPTIONS 메소드를 사용합니다.
Preflight Request 요청에서 CORS(Cross-Origin Resource Sharing) 문제 해결 방법은?
Spring Security 설정에서 요청 url에 대해 OPTIONS 메소드을 허용 해줍니다.
.antMatchers(HttpMethod.OPTIONS, "/api/**").permitAll()
만약 CORS policy … access-control-allow-headers오류가 발생한다면 WebMvcConfigurer에서 allowHeaders 메서드로 추가합니다.
참고 자료: https://developer.mozilla.org/ko/docs/Web/HTTP/CORS, CORS 정책에 대한 이야기, Referer와 Referer-Policy를 위한 가이드
댓글남기기