메이플스토리라는 게임에서 최초로 OPEN API를 공개했다. 해당 API를 사용하려던 도중 CORS 에러를 마주하게 되었다. CORS 에 대해 파헤쳐보고 과정을 기록해보려한다.
CORS 란 Cross-origin resource Sharing 의 약자이다.
직역하면 "교차 출처 리소스 공유 정책"이다.
출처? 여기서 말하는 출처란 무엇인가?
우리는 어느 사이트를 접속할 때든 url 을 통해 접근할 수 있다.
url은 여러가지 구성요소들의 조합으로 이루어져있다.
url의 구성요소들로는 아래와 같다.
protocol
host
port
path
query string
fragment
여기서 출처 는
Protocol
Host
port
를 합친 URL을 의미한다.
출처는 알겠는데 그래서 출처가 뭐 어쨌다고?
SOP 란 Same_Origin Policy 의 약자이고 직역하면 '동일 출처 정책' 이다.
말그대로 동일한 출처에 대한 정책이고 동일한 출처에서만 리소스를 공유할 수 있다 라는 법률을 가진다. 동일출처서버에 있는 리소스는 가져올 수 있지만? 다른 출처 서버에 있는 자료는 상호작용이 불가능하다는 의미다.
해당 법률이 존재하지 않으면 해커들은 CSRF
나 XSS
등의 방법으로 개인정보를 갈취할 수 있다.
CSRF
: cross-site request forgery
XSS
: cross-site scripting
위에 말했듯 출처란 Protocol
Host
port
을 말하고 이 세가지가 동일한 선에서는 동일 출처라고 할 수 있다. 달리 말해 위 세 가지 중 하나라도 다르다면 다른 출처가 된다.
그래서 CORS 란 다른 출처의 리소스를 공유하는 행동을 허용하거나 허용하지 않도록 구분하는 정책 을 말한다.
무분별한 다른 출처 리소스 공유를 허용했을 때 발생하는 문제를 방지하기 위해 만들어진 정책
SOP 정책에 위반되더라도 다른 출처 리소스를 허용해주는 건 오히려 CORS 정책이다.
빨간 줄을 뱉어내며 우리를 골치 아프게 했던 CORS 라는 친구는 사실 다른 출처 리소스 공유를 가능케 해주는 해결책이였다.