-
CORS 기본 개념BackEnd/SpringSecurity 2023. 7. 6. 23:00
CORS (Cross Origin Resource Sharing)
1. Simple Request
정의
Preflight(예비 요청)을 과정 없이 바로 본 서버로 요청함
요청스펙
SimpleRequest의 경우 요청할 수 있는 스펙이 존재한다.
1. HTTP METHOD : GET, POST, HEAD 중의 한가지 Method를 사용해야한다.
2. 헤더 : Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlin, Save-Data, Viewport-Width Width 만 가능하고 커스텀한 Header는 허용되지않는다.
3. Content-type : application/x-www.form-urlencoded, multipart/form-data, text/plain만 가능하다.
2. Preflight Request
정의
예비요청후 본요청을 서버로 요청함 (개발자 도구를 열고 확인시 OPTION HTTP METHOD를 추가적으로 확인할 수 있다)
요청 원리
Access-Control-Request-Headers를 사용하여 자신이 본 요청에서 Content-Type 헤더를 사용할 것을 알려주거나 Access-Control-Request-Method를 사용하여 GET 메소드를 사용할 것을 서버에게 미리 알려주고있다.
응답
1. 클라이언트는 서버로 요청을 보낸다.
2. 서버가 보내준 응답 헤더에 포함된 Access-Control-Allow-Origin가 요청 보낸 Oringin과 같은경우 수신하게됨
관련된 서버 설정
Access-Control-Allow-Origin : 헤더에 작성된 출처만 브라우저가 리소스를 접근할 수 있도록 허용한다.
기본 값 : GET, POST, HEAD, OPTIONS, *
Access-Control-Allow-Method : preflight request에 대한 응답으로 실제 요청 중에 사용할 수 있는 헤더 필드 이름을 나타낸다.
기본 값 : Origins, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, CustomHeader, *
Access-Control-Allow-Credentials : 실제 요청에 쿠키나 인증 등의 사용자 자격 증명이 포함 될 수 있음을 나타낸다.
Client는 credentials: include 일경우 true 필수
Access-Control-Max-Age : preflight 요청 결과를 캐시 할 수있는 시간 (해당 시간 동안preflight 요청을 다시안하게됨)
3. 스프링에서 설정시 CORS 관련 설정하는 2가지 방법
1. WebMvcConfigurer로 설정
2. Security의 CorsConfigurer로 설정
( 인터셉터필터 혹은 시큐리티 필터로 설정한다. )
4. 2가지 방법중 어디에 적용할지 생각
기본적으로 클라이언트 요청시 Security 필터가 먼저 동작하고 WebMvcConfigurer가 동작한다.
개인적으로 프로젝트에 적용시 CORS사용 이전에 필요한 작업이 Security 필터에 존재한다면 먼저 적용하면 되고 CORS사용이 먼저 우선시 된다면 Security에 적용하면 될 것 같다.
출처
'BackEnd > SpringSecurity' 카테고리의 다른 글
KeyCloak으로 Oauth2.0 인가서버 구현 - 2 (0) 2023.07.08 KeyCloak으로 Oauth2.0 인가서버 구현 - 1 (0) 2023.07.08 Oauth2.0 기본 개념 (0) 2023.07.06 SpringSecurity 흐름 (0) 2023.07.03