CORS
- Cross-Origin Resource Sharing Policy
- 교차 출처 리소스 공유
- 추가 HTTP 헤더를 사용해 한 출처에서 실행 중인 웹 어플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제
- 웹 어플리케이션은 리소스가 자신의 출처( domain, protocol, port )와 다를 때 교차 출처 HTTP 요청을 실행한다.
- 이에 대한 응답으로 서버는 Access-Control-Allow-Origin 헤더를 다시 보낸다.
![[Pasted image 20220814125649.png]]
CORS 는 에러일까?
- CORS는 에러나 오류가 아니고 정책이다. 이 보안 정책이 발생하는 이유는 뭘까?
- SOP 때문이다.
SOP
- Same Origin Policy
- 동일한 출처의 Origin만 리소스를 공유할 수 있는 것
- 만약 동일한 출처가 아니라면 OPTIONS를 이용한 Preflight 를 이용해서 여러 검증을 거치게 되는데 이 검증이 바로 CORS다.
CORS 흐름
- GET 요청인지 POST 요청인지 파악한다.
- Content-Type 과 Custom HTTP Header 를 파악한다.
- OPTIONS 요청을 통해서 서버가 적절한 Access-Control-* 를 가졌는지 확인한다.
- 만약 적절한 Access-Control 을 가졌다면 실제 XHR을 트리거한다.
- 적절하지 못한 Access-Control 를 가졌다면 Error 를 발생시킨다.
- 위 과정에서 적절한 대철를 하지 못하면 발생하는 것이 CORS 이슈이다.
Spring Boot Application 에서 CORS 해결하는 법
- CORS 원인을 다시 정리하면 Preflight 요청에 적절한 Access-Control 을 확인하지 못하면 발생한다.
- 그렇다면 적절한 Access-Control을 위한 해결 방법은?
- CorsFilter
로 직접 response header 넣어주기
- 컨트롤러 계층에서 @CrossOrigin
어노테이션 추가
- WebMvcCOnfigurer
를 이용해서 처리