python/웹

Flask CORS

끼발자 2021. 9. 27. 16:37
반응형

Flask만 단독으로 사용하여 웹을 구성하면 사실 의미없는 기능이다.

하지만, 대부분의 프로젝트가 그렇듯 여러 툴을 사용하여 구성하는 경우가 많으므로

CORS를 설정해야 한다.

 

내 경우에는 Flask로 만들어진 서버에 Vue로 프론트를 구성하였는데, api 호출이 안된다며 

cors를 설정해달라는 요청을 받았었다.

 

CORS는 무엇인가?

https://evan-moon.github.io/2020/05/21/about-cors/

이 포스트에 참 잘 설명되어있다.

 

간단하게 요약하자면 flask 에서 보내는 api를 외부에서 호출할 때,

신뢰가지않는 도메인이라고 판단해서 받아주지 않는다고 생각하면 된다.

왜 신뢰할 수 없는 도메인을 차단하는지는 위의 링크에 나타나있다.

 

그럼 flask에서 cors를 어떻게 적용시킬까?

 

pip install flask_cors

flask는 필요한 모듈들을 계속 설치해서 사용해야한다.

 

이 다음으로는

...
from flask_cors import CORS

...

CORS(app)
CORS(app,resource={r'*':{'origins':'*'}})

CORS에 앞서 만들어놓은 flask객체 app을 담아두고, 허용할  resource를 명시해주면 된다.

위에 적혀있는 코드는 예외없이 모든 경우에서 호출을 허용한다는 의미이고,

만약 특정 호스트에서 호출만 원하는 경우 혹은 특정 endpoint만 호출을 허용하는 경우에는 다음과 같이 구성한다.

 

CORS(app)
CORS(app,resource={r'*':{'origins':'kkiho.tistory.com/'}}) # kkiho.tistory.com 에서만 허용
CORS(app,resource={r'/api/*':{'origins':'*'}}) # /api/로 시작되는 end_point만 허용

origins에 value가 여러개일 경우 list로 묶어서 전달하면 여러 호스트에서 CORS를 허용해 줄 수 있다.

 

반응형