Spring Security - CORS ( Preflight Request, OPTIONS )

TopOfTheHead·2025년 11월 18일

Spring Security

목록 보기
25/27

Cross-Origin Request :
。특정 Origin에서 다른 Origin으로 HTTP Request를 전송하는것을 의미.

  • 출처 : (Origin) :
    。웹브라우저에서 Origin프로토콜 + 도메인 + 포트번호 를 조합한 값.
    https:// + example.com + :8080

CORS ( Cross-Origin Resource Sharing ) :
브라우저Cross-Origin Request의 허용여부를 결정하는 웹 보안정책.
CORS가 존재하지 않으면, 브라우저Cross-Origin Request를 무조건 차단.

。다른 서버에서 해당 서버자원을 가져갈 지 결정하는 규칙
▶ 허용된 출처에서만 서버자원을 가져갈 수 있게 설정

서버 - 서버 간 통신에는 적용되지 않으나, 브라우저 간 통신CORS 정책이 적용
브라우저Spring이 통신 시 CORS 정책을 허용하는 코드를 정의

ex ) http://localhost:3000/ ( React )에서 http://localhost:8080/ ( Spring )으로 통신 시 CORS로 인한 Spring Security에 의해 차단.
리액트 : 포트 : 3000이므로, 스프링 : 포트 : 8080이므로, 포트가 다르기에 서로 다른 출처임에 따라서 CORS에 규약됨.

  • Spring Security에서는 기본적으로 다른 Origin으로부터의 Cross-Origin Request를 차단
    필터 레벨에서 CORS 관련 설정을 수행하지 않는 경우, Spring Security Filter에 의해 다른 출처브라우저 로부터의 요청을 차단이 수행됨
    CORS 정책을 설정함으로써 특정 도메인에만 HTTP Request를 허용하도록 설정.

    Spring MVC 레벨에서의 WebMvcConfigurer에서 설정한 CORS 정책Spring Security가 참고 후 검증을 통해 Cross-Origin Request 허용
    CORS 정책에서 설정된 Origin, Method, Header 등을 기반으로 요청검증허용

  • 반드시 CORS를 설정하고, 외부 출처화이트리스트로서 추가해서 허용하는 방식으로 운용해야한다.
    Spring Security 범위*로만 하면 안되고, 화이트리스트를 통한 허용 범위를 설정하기
    CorsRegistry객체.allowedOrigins("URL명")을 통해 접속을 허락할 외부출처를 설정

Preflight Request :
브라우저CORS Policy에 따라 서버에 실제 HTTP Request를 전달하기 전 사전에 확인용도로 OPTIONS Request Method를 사용하여 전달하는 요청

Preflight RequestCORS Policy가 적용될때, 특정 조건을 만족 시 자동으로 발생.


Preflight Request 발생 조건
。다음 조건을 만족하는 경우 Preflight Request 발생.

  • Cross-Origin :
    。다른 URL의 출처( Origin )으로 요청 시 발생.

  • Simple Request에 해당하지 않는 경우.
    PUT , DELETE 등의 HTTP Method 또는 Authorization Header를 포함 시 Preflight Request 발생.
    • Simple Request :
      GET, HEAD , POSTHTTP Method만 사용.

      Content-Typeapplication/x-www-form-urlencoded, multipart/form-data, text/plain 중 하나

      Custom Header ( Authorization , X-Custom-Header )가 없는 경우

    • OPTIONS Request Method
      Server의 특정 Resource에서 허용하는 HTTP Method를 물어보는 용도의 Request.
      Client에서 해당 resource URL에서 사용할 수 있는 HTTP Method가 무엇인지 묻는 용도로 활용됨.
profile
공부기록 블로그

0개의 댓글