CORS란 Corss Origin Resource Sharing 약자로 오리진을 크로스해서 데이터를 공유한다는 의미다.
여기서 오리진은 도메인(ip주소)를 의미힌다.
corss-origin은 보안적인 이유로 인해 브라우저에서 HTTP 요청들을 제한한다.
corss-origin 요청을 하기 위해서는 서버의 동의가 필요하다.
만약 서버가 동의한다면 브라우저에서는 요청을 허락하고, 동의하지 않는다면 브라우저에서 거절한다.
이러한 허락을 구하고 거절하는 메커니즘을 CORS라고 부르는 것이다.
cross-origin이라고 불리는 경우
- 프로토콜이 다른 경우 :
http
와https
는 프로토콜이 다름- 도메인이 다른 경우 :
tthh12.com
과tthh123.com
은 다름- 포트 번호가 다른 경우 :
8080
포트와3000
포트는 다름
CORS의 동작원리는 요청을 어떻게 했는냐에 따라 달라지게 된다.
단순 요청(Simple requests)이란 다음과 같은 조건을 모두 충족하는 요청이다.
이와 같은 내용을 단순 요청이라 부른다.
이 요청은 추가적으로 확인하지 않고 바로 본 요청을 보낸다.
Origin
헤더에 현재 요청하는 origin과 Access-Control-Request-Method
헤더에 요청하는 HTTP method와 Access-Control-Request-Headers
요청시 사용할 헤더를 OPTION
메서드로 서버 요청을 한다.단순 요청(Simple requests)가 아닌 cross-origin 요청은 모두 preflight 요청을 하게 되는데, 실제 요청을 보내는 것이 안전한지 또는 서버와 연결이 제대로 되어 있는지 확인하기 위해 먼저 OPTION 메서드를 사용하여 HTTP 요청을 보낸다.
Access-Control-Request-Method && Access-Control-Request-Headers
- Access-Control-Request-Method
- preflight 요청을 할 때 실제 요청에서 어떤 메서드를 사용할 것인지 서버에게 알리기 휘새 사용
- Access-Control-Request-Headers
- preflight 요청을 할 때 실제 요청에서 어떤 header를 사용할 것인지 서버에게 알리기 위해 사용