CORS (Cross-Origin Resource Sharing) 설정
CORS란?
CORS는 보안상의 이유로 필요한 경우에만 서버와 협의하여 데이터를 요청할 수 있도록하는 장치이다.
CORS를 알기 위해서는 우선 Origin이 무엇인지 이해가 필요하다.
Origin (출처)
우리가 특정 사이트를 접속을 위해 사용하는 URL은 아래의 그림과 같은 요소로 구성되어 있다.
각 구성요소는 다음의 특징을 가진다.
- Protocol(Scheme) : http, https
- Host : 사이트 도메인
- Port : 포트 번호
- Path : 사이트 내부 경로
- Query string : 요청의 key와 value값
- Fragment : 해시 태크
CORS에서 얘기하는 Origin은 위의 URL 구성 요소 중 _Protocol + Host + Port_를 말한다.
Same-Origin, Cross-Origin 정책
Same-Origin은 Protocol, Host, Port이 모두 동일한 경우, Cross-Origin은 Protocol, Host, Port 중 한가지라도 다른 경우를 말한다.
웹에서 동일 출처(Same-Origin) 서버에 있는 리소스는 자유로이 가져올수 있지만, 다른 출처(Cross-Origin) 서버에 있는 이 리소스는 상호작용이 불가능하다. 브라우저에서는 보안의 이유로 cross-origin HTTP 요청들을 제한하기 때문이다. 모든 곳에서 데이터를 요청할 수 있게 되면, 악의적으로 정보를 추출하거나 사용자의 정보를 탈취할 수 있다.
CORS
그렇기 때문에 Cross-Origin 요청을 하기 위해서는 별도의 서버 동의가 필요하다. CORS(Cross-Origin Resource Sharing)는 HTTP_header를 사용해서 Cross-Origin에 대한 허락을 구하고 거절하는 매커니즘이다.
Flask CORS 설정방법
Flask에서 CORS를 설정하는 방법은 전역 환경과, 블루프린트 두가지로 나뉜다. 블루프린트에 pre_fixed_url이 있는경우 다음의 방법을 통해 등록해 줄 수 있다.
General
from flask import Flask, session
from flask_cors import CORS
app = Flask(__name__)
cors = CORS(app, resources={
r"/api/*": {"origins": "*"},
r"test/api/*": {"origins": [
# 로컬
"http://localhost:8080",
"http://localhost:8081",
]
}
}
BluePrint
from flask import Flask, session
from flask_cors import CORS
api_v1 = Blueprint('API_v1', __name__)
CORS(api_v1) # enable CORS on the API_v1 blue print
@api_v1.route("/api/v1/users/")
def list_users():
...
<참고>
'# Development > Flask' 카테고리의 다른 글
[Flask] Slack Bot 으로 서비스 장애 알림 받기 (0) | 2023.03.14 |
---|---|
[Flask] python-dotenv로 개발/배포 환경 분리하기 (0) | 2023.03.06 |
[Flask] Flask에서 Express MiddleWare 사용하기 (0) | 2023.02.15 |