처음 프론트엔드 개발을 공부하고, 프로젝트를 하면서 API를 사용한 적이 있다. 이떄 CORS Error를 겪었다. 당시에는 구글링을 통해 해결책을 보고 공개되어 있는 CORS-ANYWHERE 프록시 서버로 우회하는 방법을 사용했다. 하지만 그 서버가 닫히고, 직접 cors-anywhere 를 배포하여 사용하는 과정을 겪으면서 근본적인 원인을 알고 싶었다.
SOP
: Same Origin Policy, 다른 출처
리소스를 사용하는 것을 제한하는 보안 방식
출처
: URL의 Protocol
, Host
, Port
이 3가지로 하나의 출처를 결정한다.
SOP를 쓰는 이유
SOP를 사용하면 보안에 도움이 된다. 하지만 현대의 웹에서 같은 출처의 리소스만을 사용하기에는 너무 아쉽다. 다른 출처의 리소스로의 접근이 필요하다.
SOP의 위와 같은 문제를 해결하기 위해 CORS가 등장한다.
Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own from which a browser should permit loading resources. - MDN
Preflight
: OPTIONS 메서드를 통해 실제 요청 전에 다른 출처의 리소스에 접근이 가능한지 확인하는 작업 => 요청 가능하다고 판단되면 실제 요청 전송cors-anywhere를 fork한다. 그리고 Koyeb에서 깃허브를 통한 배포를 하고, API요청 앞에 해당 서버의 URL을 붙여서 API요청을 시도하면 CORS에러가 해결되는 것을 볼 수가 있다.
cors-anywhere의 역할 : 응답 헤더에 요청 출처를 첨부하여 CORS에러가 발생하지 않게 해준다!