여기서 origin이란 요청을 보낸 도메인을 의미. 두번째 예시는 같은 도메인으로 요청을 보낸 것이 아니기 때문에
XMLHttpRequest cannot load ’http://localhost:3000’. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ’http://localhost:8080’ is therefore not allowed access.
위와같은 에러를 만나게된다. 그러나.. 개발을 하다보면 다른 서버의 API를 요청하는 일이 번번히 발생한다. 이런 상황에서 불편을 해결하기 위해 등장한 것이 Cross Origin Resource Sharing(CORS) 정책이다.
클라이언트는 서버에 HTTP 요청을 보낼 때 HTTP 헤더의 Origin
속성에 자동으로 값이 할당된다.
Origin: https://example.com
이 도메인에서 다른 출처의 자원을 사용하기 위해 ajax 요청을 했다고 하면 SOP 정책 때문에 에러가 발생한다. 따라서 서버는 response
헤더에 Access-Control-Allow-Origin
를 추가하여 요청을 허용할 수 있다.
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*') // 모든 도메인 허용
res.header('Access-Control-Allow-Origin', 'https://example.com') // 특정 도메인 허용
})
origin
을 열어주지 못할 때 사용하면 유용하다.Access-Control-Allow-Origin
설정을 적절히 하여 클라이언트에게 돌려주는 방법이다.CORS가 나오기 이전에 사용하던 방식으로, <script>
태그를 사용하면 SOP 정책을 피할 수 있다.
<script src="http://company.com/example.json"></script>
최신 브라우저에서는 거의 사용 안하고 오래된 브라우저에서 사용하는데 보안문제가 있어서 CORS를 권장한다.