■ CORS 에러 란?
CORS는 SOP를 위반하여 나타나는 에러입니다. 클라이언트에서 다른 도메인을 가지는 서버로 요청을 보낼때, 브라우저에서 발생하는 보안정책을 의미합니다.
- SOP(Same-Origin Policy) : 출처가 동일한 프로토콜, 포트번호, 도메인에서만 자원을 사용가능 하도록 하는 보안정책
- CORS(Cross-Origin Resource Sharing) : 교차 출처 리소스 공유로 현재 출처(Origin)가 아닌 다른 도메인에 요청을 보내 리소스를 공유
■ Origin 이란?
Origin이란, 요청을 보낸 곳의 주소(IP + Port)를 의미합니다. 다른 출처로 요청을 보낼 때 Request Header에 Origin을 포함하고, 서버는 응답헤더에 Access-Control-Allow-Origin을 담아 클라이언트로 전달합니다. 클라이언트에서 자신이 보냈던 요청의 Origin과 서버가 보내준 Access-Control-Allow-Origin을 비교하여 자신이 보낸 요청이 유효하지 않다면 그 응답을 사용하지 않고 버립니다.
■ CORS 에러 해결하기
저는 서버에서 다음 2가지 방법을 사용하여 해당 에러를 해결했습니다.
1. 호출 Controller에 @CrossOrigin 어노테이션 사용
@CrossOrigin은 spring mvc에서 제공하는 어노테이션으로 교차 출처를 허용하는 것을 의미합니다. 기본적으로 모든 출처, 모든 헤더를 최대 30분 허용하지만 속성값을 넣어 기본값을 대체할 수 있습니다.
2. CORS 허용 필터 코드 작성
웹서버의 모든 리소스의 요청을 가로채서 Cross Domain Request인지 체크하는 로직을 작성합니다.
- Access-Control-Allow-Origin : 도메인 간 요청을 할 수 있는 권한이 부여된 도메인 지정
- Access-Control-Allow-Credentials : 도메인 간 요청에 credential 권한이 있는지 없는지 지정
- Access-Control-Allow-Methods : 리소스에 접근할 때 허용 메소드 지정
- Access-Control-Max-Age : pre-flighted 요청이 얼마만큼의 시간동안 캐시되는지 지정
- Access-Control-Allow-Headers : 어떤 헤더 필드 네임이 실제 요청에서 사용할 수 있는지 지정
'Spring' 카테고리의 다른 글
[Spring] Spring Framework vs Spring Boot 차이점 (0) | 2024.01.15 |
---|---|
[Spring] @Value 어노테이션 Null 현상 해결 (0) | 2024.01.15 |