[웹개발] 02. Flask에서 CORS를 해결하는 방법
CORS 란?
CORS는 Cross Origin Resource Sharing의 약자로 도메인 또는 포트가 다른 서버의 자원을 요청하는 상황을 말한다.
문제는 이러한 경우 동일출처정책(same-origin policy)때문에 일반적인 경우 외부서버에서 온 요청을 차단하게 된다.
따라서 사용할 서버의 도메인을 미리 허용하지 않은 경우 데이터를 원활히 주고 받을 수 없다.
실제로 앞서 진행한 프로젝트에서는 웹서버(react서버, django서버), 딥러닝서버(Flask서버)로 3가지 이상의 포트를 사용하고 있었고, 초반에는 CORS를 모르고 있었기 때문에 많은 고생을 한 경험이 있다.
Flask에서 간단히 CORS 설정하기
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=1219)
1. import 하기
flask_cors 에서 CORS와 같이 사용할 모듈을 불러온다.
2. CORS(app)
위의 코드와 같이 Flask의 인스턴스로 만들어진 app을 CORS에 넣어 app에 설정된 서버에 CORS를 적용한다.
(위와 같이 작성할 경우 모든 주소에 대해 허용하므로 보안에 취약하다.)
3. 특정 도메인 혹은 포트만 허용하기
# 1
CORS(app, resources={r'*': {'origins': 'https://hwangtoemat.github.io'}})
# 2
CORS(app, resources={r'/computer-science/*': {'origins': 'https://hwangtoemat.github.io:1121'}})
1번의 경우 ‘https://hwangtoemat.github.io’ 에 해당하는 모든 포트, 하위 주소를 허용한다.
2번의 경우 ‘https://hwangtoemat.github.io’ 에서 /computer-science의 하위 경로와 포트번호 1121만 허용한다.
@app.route(‘/modelfr’, methods=[‘GET’])는 app에서 생성된 서버에 modelfr의 경로를 라우팅해주는 함수이다. 또한 methods를 사용하여 Rest api의 요청을 설정할 수 있다.
위의 코드는 /modelfr에 get요청이 왔을때 작용하는 함수를 설정한 것이다. 들어온 요청은 request를 사용하여 쉽게 처리할 수 있다.