CORS가 란? Cross Origin Resource Sharing의 약자로, 시스템 수준에서 타 도메인 간 자원 호출을 승인하거나 차단하는 것을 결정하는 것이다. 예를들어, 나 너네 서버에 POST 요청해도 되니? 라는 요청을 먼저 보내고 해도 된다는 응답이 오면 그때 POST 요청을 보내는 것이다.
그럼 CORS가 왜 필요한 것인가? 다른 도메인에서의 자원을 호출하는 행위에 제한이 없으면 안전하지 않다. 그래서 서버가 허용한 클라이언트의 요청에만 응답하기 위해서 필요한 것이다.
서버가 CORS를 허용하기 위한 HTTP 헤더 각각의 목적을 이해해보자.
- Access-Control-Allow-Origin : 단일 출처를 지정해서 브라우저가 해당 출처가 리소스에 접근하도록 허용한다. "*" 처리를 해주면 origin에 상관없이 모든 리소스에 접근하도록 허용해준다.
- Access-Control-Allow-Methods : 리소스에 접근할 때 허용되는 메서드를 지정한다.
- Access-Control-Allow-Headers : 사용자 정의 헤더를 받을 수 있음을 나타내준다. 예를 들어, " 'Access-Control-Allow-Headers' : 'X-PINGOTHER, Content-Type' " 이렇게 작성이 되어있다면, 'X-PINGOTHER, Content-Type' HTTP 헤더를 사용할 수 있게 된다.
- Access-Control-Max-Age : prefilght request 요청 결과를 캐시할 수 있는 시간을 나타낸다. 다시 말해서 preflight request 유효기간을 설정해주는 것이다. 예를 들어 'Access-Control-Max-Age : 86400' 이라고 되어있으면, preflight request를 한번 보내고 허가를 받으면 86400초(24시간) 동안 preflight request를 굳이 보내지 않아도 리소스 요청을 할 수 있다.