티스토리 뷰
브라우저 초기에 보안상의 이유로 스크립트 내에서 시작된 교착 출처 HTTP 요청을 제한하는데, 이를 SOP(Same-Origin Policy, 동일 출처 정책)라 한다.
동일 출처?
SOP는 두 Origin 간에 프로토콜, 포트, 호스트가 같아야 동일 Origin라고 할 수 있다.
예를 들어, http://www.heowc.com
이라는 URL이 있다면 다음과 같은 상황이 발생한다.
크로스도메인 이슈란?
- 웹 브라우저에서 Ajax 등을 통해 다른 도메인의 서버에 url(data)를 호출할 경우, 나타나는 보안문제를 말합니다.
(만약, 내가 만든 웹서비스에서 사용하기 위한 rest api 서버를 다른 도메인에서 접근하여 사용한다면, 보안상 문제가 될 수 있습니다.)
크로스도메인 이슈 해결방법
- 서버측에서 크로스도메인을 허용하여 문제를 해결하는 방식
- 클라이언트측에서 크로스도메인을 해결하는 방식
(서버측에서 크로스도메인 설정하여 문제를 해결하는 것이 표준화된 방법 입니다.)
CORS
그래서 이를 보완하기 위해 브라우저측에서 JSONP를 사용하거나, 서버측에서 CORS를 이용하여 웹 페이지의 제한된 자원을 외부 도메인에서 접근할 수 있도록 하여 해결할 수 있다. 여기서 CORS(Cross-Origin Resource Sharing) 란, 웹 서버 도메인간 액세스 제어 기능을 제공하여 보안 도메인간 데이터 전송을 가능하게 해준다.
CORS 동작과정
- pre-flight : 실제 요청하려는 경로와 같은 URL에 대해 OPTIONS로 요청을 날려보고 요청가능한지 확인
- 실제 요청
Spring Boot에서 활용 해보기
우선, 서버에서는 브라우저에 다음과 같은 키를 header에 보내줘야 한다.
Access-Control-Allow-Orgin
: 요청을 보내는 페이지의 출처 (*, 도메인)Access-Control-Allow-Methods
: 요청을 허용하는 메소드 (Default : GET, POST, HEAD)Access-Control-Max-Age
: 클라이언트에서 pre-flight의 요청 결과를 저장할 시간 지정. 해당 시간 동안은 pre-flight를 다시 요청하지 않는다.Access-Control-Allow-Headers
: 요청을 허용하는 헤더
그리고 Spring과 Spring Boot에서는 아래의 2가지 방법으로 CORS를 해결할 수 있다.
Controller 지정
개별적으로 허용하는 방법으로는 @CrossOrigin
를 사용하는 것이다.
|
|
Global하게 지정
WebMvcConfigurer
를 구현하거나 다음과 같이 @Bean
으로 등록하여 addCorsMappings
에 원하는 path를 추가하면 된다.
|
|
출처 : https://heowc.github.io/2018/03/13/spring-boot-cors/
'Web > Spring' 카테고리의 다른 글
1. IoC 컨테이너 (0) | 2020.08.30 |
---|---|
Spring Boot Batch 이해 (작성중) [ - yun blog글 참고 ] (0) | 2020.03.25 |
자바 암호화하여 문자열로 저장하기, SHA256 사용. (0) | 2018.08.19 |
스프링부트 서버에 배포하기 2탄(jsp 관련 오류해결 및 filezilla) (0) | 2018.07.24 |
스프링 리얼서버(centos) 에 구동 후 HelloWorld 띄우기! (0) | 2018.07.19 |