CORS 와 스프링부트에서의 해결 방안

wisdom·2022년 8월 14일
0

백엔드 개발자라면?

목록 보기
13/42

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 흐름

  1. GET 요청인지 POST 요청인지 파악한다.
  2. Content-Type 과 Custom HTTP Header 를 파악한다.
  3. OPTIONS 요청을 통해서 서버가 적절한 Access-Control-* 를 가졌는지 확인한다.
  4. 만약 적절한 Access-Control 을 가졌다면 실제 XHR을 트리거한다.
  5. 적절하지 못한 Access-Control 를 가졌다면 Error 를 발생시킨다.
  • 위 과정에서 적절한 대철를 하지 못하면 발생하는 것이 CORS 이슈이다.

Spring Boot Application 에서 CORS 해결하는 법

  • CORS 원인을 다시 정리하면 Preflight 요청에 적절한 Access-Control 을 확인하지 못하면 발생한다.
  • 그렇다면 적절한 Access-Control을 위한 해결 방법은?
    - CorsFilter 로 직접 response header 넣어주기
    - 컨트롤러 계층에서 @CrossOrigin 어노테이션 추가
    - WebMvcCOnfigurer 를 이용해서 처리
profile
문제를 정의하고, 문제를 해결하는

0개의 댓글