CORS 파헤치기

Martin the dog·2024년 4월 2일

스프링 복습하기

목록 보기
14/15

Cors 란 무엇인가?

CORS란 교차 출처 리소스 공유의 약자로 다른 출처(도메인)에서 실행중인 웹 어플리케이션의 접근권한을 부여하도록 하는 체제이다.
예를 들어
A-(이미지 요청)->A (같은 도메인이기 때문에 허가)
B-(이미지 요청)->A (다른 도메인이기 때문에 접근 비허가)
이다.
근데 대부분의 경우 다른 도메인에서 자료를 요청하는 경우가 많다.

CSS의 경우 웹 폰트

그렇기 때문에 CORS를 잘 알아야 한다.

Cors는 어떻게 이루어 지는가?

  1. 먼저 Client에서 Server로 요청을 보내기 전 preflight을 보내 Server가 해당 해당 요청을 받아들일 수 있는지 확인한다.

    preflight란? 실제 요청 전송전 전송이 안전한지 미리 확인하는 것

  2. Server 에서 Response Header에 Access-Control-Allow-Origin(접근 가능한 출발지 주소), Access-Control-Allow-Method(PUT, POST, DELETE, GET), Access-Control-Allow-Header(브라우저가 받을 수 있는 요청하면 받을 수 있는 헤더 목록) 등을 Client한테 보낸다.
  3. 브라우저는 해당 Response를 보고 요청이 가능한 경우 서버에 요청을 보낸다.
  4. Server에서 실제로 요청을 처리한 후 결과를 반환한다.

Spring Security에서는 cors를 어떻게 처리해야할까?

@Configuration과 @ㄷEnableWebSecurity가 적용된 class에 CorsConfigurationSource를 반환하는 @bean 클래스를 정의한다.

@Bean
    public CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        //모든 경로에서 허용
        //Access-Control-Allow-Origin
        configuration.addAllowedOriginPattern("*");
        //모든 헤더 허용 (Content-type등)
        //Access-Control-Allow-Header
        configuration.addAllowedHeader("*");
        //Access-Control-Allow-Method설정
        configuration.addAllowedMethod("*");
        //내 서버가 응답을 할 때 json을 자바스크립트에서 처리할수 있게 할지를 설정
        //요청에 인증 정보 (쿠키(Cookies),HTTP 인증 정보(HTTP Authentication),클라이언트 SSL 인증서(Client-side SSL certificates)를 포함시킬지 여부
        configuration.setAllowCredentials(true);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

를 해주면 사용할 수 있다.

profile
Happy Developer

0개의 댓글