본문 바로가기

개발중/Spring

[Spring] CORS 가 뭐야 ?

728x90
반응형

Cors 란 무엇인가 ?

현재 IP 가 다른 IP 로 리소스를 요청하는 구조에 대응하는 정책이다.

Cors 는 웹 상에 있어 하나의 보안 정책이다.
하지만 처음 겪으면 너무 당황스럽고 까다로운 보안 정책이지만 개념을 알고나면 잘 해결 할 수 있다!

 

WEB CROS  허용 설정 (Vue -> API)

성공 기록 CROS 는 이 블로그로 조금 이해를 얻었다. 요청시 Origin 에 요청 url 이 들어가고 응답해주는 응답에서는 Access Control Allow Origin 에는 요청을 허용해주는 url 이 들어가야 한다. 프론트에서

soobindeveloper8.tistory.com


Cors 핵심용어

 

Origin

Origin은 요청이 시작된 서버의 위치를 나타내는문구이다.

SOP

SOP는 Same Origin Policy를 뜻한다.
Same Origin Policy란? 2011년 RFC 6454에서 등장한 보안 정책으로 동일한 출처의 Origin만 리소스를 공유할 수 있다.

Access-Control-Allow-Origin

이 Access-Control-Allow-Origin은 바로 Cors 에 대상 리소스를 명시해 줄 수 있다.


Cors 의 과정

  1. HTTP 통신 헤더인 Origin 헤더에 요청을 보내는 곳의 정보를 담고 서버로 요청을 보낸다.
  2. 이후 서버는 Access-Control-Allow-Origin헤더에 허용된 Origin이라는 정보를 담아 보낸다
  3. 클라이언트는 헤더의 값과 비교해 정상 응답임을 확인하고 지정된 요청을 보낸다.
  4. 서버는 요청을 수행하고 200OK 코드를 응답한다.

Spring Code 로 Cors 대응

addMapping

Cors 를 적용할 URL 패턴 정의

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }
}

 

allowedOrigins

자원 공유 허락할 Origin 지정

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*");
}

 

allowedMethods

허용할 HTTP method를 지정

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST");
}

 

maxAge

원하는 시간만큼 캐싱

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST")
                .maxAge(3000);
}

 

Annotation 이용하기

CrossOrigin 어노테이션을 이용하면 허용할 origins, methods 지정 가능

@RequestMapping("/somePath")
@CrossOrigin(origins = "*", allowedHeaders = "*")
public class SomeController {
 
	@CrossOrigin(origins="*")
    @RequestMapping(value = "/{something}",method = RequestMethod.DELETE)
    public ResponseEntity<String> delete(@PathVariable Long reservationNo) throws Exception{
    }
}

 



참조사이트

728x90
반응형