4. CORS
CORS(Cross-Origin Resource Sharing)
웹 브라우저는 동일 출처 정책이라는 것이 존재한다. 동일 출처만 처리해준다는 원칙, 도메인과 포트까지 포함된 것으로 이는 어떤 출처에서 불러온 문서나 스크립트가 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 보안 방식이다. 동일 출처 정책은 출처가 불분명한 문서를 참조함으로써 받을 수 있는 공격의 경로를 줄여주는 정책이다.
HTTP 헤더를 보면 Origin을 명시해주는데 당장 이렇게 포트만 달라도 CORS 오류가 나오게 된다.
JSONP
script 태그는 동일 출처를 따지지 않는다는 점을 이용해서 서버에서 JSON을 전달하는게 아니라 실행되는 자바스크립트 코드를 전달하는 방식으로 과거에나 사용됐다.
Access-Control-Allow-Origin
웹 브라우저가 동일 출처 정책에 예외를 방법을 제공하는데 CORS는 HTTP 응답 헤더를 이용해 이 문제를 해결할 수 있다.
헤더에 다음과 같은 요소를 하나 넣어주면
ohjinn.com이 origin인 자원을 모든 곳에서 사용할 수 있게 된다.
Preflight
응답 헤더에 허용 여부가 있다면 데이터가 많이 들어간 요청이 있다면 비효율을 야기한다. 따라서, OPTIONS 메서드를 이용해 Preflighted Request를 보낼 수 있다.
위와 같이 preflight를 이용해 간을 보면 서버에서는
이렇게 응답을 해 준다.
@CrossOrigin
Spring web MVC에서
이런식으로 서블릿에 헤더를 추가해 줄 수도 있지만 스프링에서 @CrossOrigin을 추가해주면 된다
Last updated