웹서버를 만들다보면은 마주치는 여러가지 문제가 있습니다. 그 중 하나가 바로 CORS인데요
오늘 작업한 내용은 CORS이기 때문에 해당 내용을 정리할려고 합니다.
이번에 JOINUS 작업을 하면서 기존 회사에서는 만들어진 작업을 하느라 생각하지도 못했던 부분인 CORS 문제가 발생했습니다.
처음에는 이게 뭔가 싶어서 일단은 작업을 진행을 했어야 했기에 모든 호출을 허용을 해주었으나
슬슬 정상적으로 베포를 해야할 시기와 와서 CORS에 대해서 찾아보고 등록을 하고 있습니다.
CORS를 알아보기에 앞서 먼저 알아야 하는 개념이 있습니다.
바로 SOP(Same Origin Policy) 인데요.
이것은 내가 접속한 사이트에서 호출한것 외에 다른 사이트들의 접속을 막는 겁니다.
예를 들어 localhost != 에서 https://test.site 를 호출을 했다면 해당 호출은 막히게 됩니다. https://test.site 에서 호출한 https://test.site만 원래대로 돌려주기 때문입니다.
localhost != https://test.site 이기 때문에 막히게 됩니다.
추가적으로 여기서 호출한 사이트의 출처를 보는것은
프로토콜, 포트, 도메인 입니다. 이 셋중 하나라도 다르면 오류가 납니다.
그러면 이러한것을 왜 막아놓느냐고 하면 해당 영상에서 본 글을 정리하자면
익명의 누군가가 정상적인 홈페이지 외에 다른 곳에서 호출을 하여 정보를 가져갈수가 있게 되는 것입니다.
예를 들면 GET https://test.site/member 해당 호출을 하면 member의 정보를 빼올 수 있게 되어있다고 해봅시다. 만약 다른 서버에서 해당 GET 호출을 해서 정보를 빼올수 있습니다. 하지만 SOP때문에 https://test.site 에서 호출하는 GET 호출만 받아올수가 있습니다. 보안을 하는것입니다.
그렇다면 CORS(Cross Origin Resource Sharing)는 무엇인가?
SOP가 설정이 되어있으면 우리는 해당 서버에 있는 api랑 이미지만 쓸 수 있고 다른 곳에서 호출해야하는 것을 사용하기가 어렵습니다. 그래서 다른 호출이여도 허용을 해주겠다고 나온것이 바로 CORS입니다.
CORS에 내가 허용해줄 사이트를 적어넣어주면 해당 사이트는 SOP가 있어도 허용을 해주겠다는 것입니다.
CORS를 써서 허용해주는 사이트를 등록을 해주는 것이다.
flask 에서는 아래와 같이 사용을 한다.
pip install flask_cors
from flask_cors import CORS
...
CORS(app,resource={r'*':{'origins':'*'}})
CORS(app,resource={r'/api/*':{'origins':'*'}}) # /api/로 시작되는 end_point만 허용
origins 에는 허용해주는 출처를 넣어주면 됩니다.