목차
[Python]flask의 cors란?
CORS(Cross-Origin Resource Sharing)는 웹 애플리케이션에서 보안 상의 이유로 다른 도메인에서 리소스에 접근하는 것을 제한하는 브라우저 정책입니다. 동일 출처 정책(Same-Origin Policy)에 의해 웹 페이지는 자신과 동일한 출처에서만 리소스를 로드하도록 제한되어 있습니다. 이는 보안을 유지하고 악의적인 코드로부터 사용자 데이터를 보호하기 위한 중요한 기능입니다.
CORS는 이러한 제한을 느슨하게 만들어 다른 도메인에서도 웹 페이지 리소스에 접근할 수 있도록 하는 메커니즘입니다. 서버 측에서 CORS 정책을 설정하면 특정 도메인들로부터의 요청을 수락하게 되며, 이를 통해 다른 도메인에서 웹 서버에 요청을 보내고 응답을 받을 수 있습니다.
Flask-CORS는 Flask 애플리케이션에서 CORS를 구현하기 위한 도구로, CORS 정책을 쉽게 설정하고 관리할 수 있도록 도와줍니다. Flask-CORS를 사용하는 경우는 다음과 같습니다:
API 서버 구축: 만약 Flask를 사용하여 RESTful API 서버를 구축하고 있고, 다른 도메인의 웹 애플리케이션에서 이 API에 접근해야 할 경우에 Flask-CORS를 사용할 수 있습니다.
싱글 페이지 애플리케이션(SPA): 웹 애플리케이션이 싱글 페이지 애플리케이션인 경우, 서버와 클라이언트가 다른 도메인에 있을 수 있습니다. 이때 클라이언트 애플리케이션이 서버의 API에 접근해야 할 때 Flask-CORS를 사용할 수 있습니다.
외부 도메인과의 통합: 서버의 데이터나 서비스를 외부 도메인의 웹 페이지에서 활용하려면, 해당 도메인에서 서버에 접근이 가능하도록 CORS를 설정해야 합니다.
간단히 정리하면 CORS는 해킹에 대한 보안 정책으로 HTTP페이지에서 다른 서버로 접속할때 차단해줍니다. 이때 일반적인 접속은 허용해주지만 <script>에 포함된 명령 중에 다른 서버로 접속 하려고 할때 차단이 발생합니다. 아래 예제를 읽어 보시면 쉽게 이해할 수 있습니다.
예제를 통해 차이점 이해하기(flask_cors)
예제코드- app.py>>
from flask import Flask, jsonify
from flask_cors import CORS
app = Flask(__name__)
# 모든 경로에 대해 CORS 설정을 허용합니다.
CORS(app)
@app.route('/')
def index():
data = {'message': '안녕하세요! CORS 문제가 없는 데이터입니다.'}
return jsonify(data)
if __name__ == '__main__':
app.run()
2, 4번 라인을 통해 cors를 flask 환경에서 실행해줍니다.
9~13번 라인: 서버에 접속 시 json 형태로 데이터를 전달합니다.
예제 코드-index.html>>
<!DOCTYPE html>
<html>
<head>
<title>CORS 예제</title>
</head>
<body>
<h1>CORS 예제</h1>
<script>
fetch('http://127.0.0.1:5000/')
.then(response => response.json())
.then(data => {
console.log(data.message);
})
.catch(error => {
console.error('데이터 가져오기 실패:', error);
});
</script>
</body>
</html>
위 html 파일은 go live와 같은 프로그램으로 다른 서버로 동작 시킵니다.
결과>>
html은 5500포트에서 동작했고 flask는 5000포트에서 동작합니다. 서로 다른 포트에서 동작 했고 console.log로 정상적으로 값이 출력되었음을 확인할 수 있습니다.
cmd curl로 헤더값(header) 확인하기>>
C:\Users\forgo>curl -i http://127.0.0.1:5000/
HTTP/1.1 200 OK
Server: Werkzeug/2.3.6 Python/3.11.1
Date: Mon, 21 Aug 2023 00:20:05 GMT
Content-Type: application/json
Content-Length: 121
Access-Control-Allow-Origin: *
Connection: close
{"message":"\uc548\ub155\ud558\uc138\uc694! CORS \ubb38\uc81c\uac00 \uc5c6\ub294 \ub370\uc774\ud130\uc785\ub2c8\ub2e4."}
위와 같이 윈도우(window) 커맨드 창에서 curl을 사용해서 http get 요청을 보냈고 위와 같은 값을 받습니다.
Access-Control-Allow-Origin: *
위 내용이 CROS를 허용하게 해주는 헤더 입력 값이 됩니다.
예제 코드 다운로드
'파이썬(Python) > Flask' 카테고리의 다른 글
[Python] flask blueprints란? 예제로 쉽게 이해하기(블루프린트, 파이썬) (0) | 2023.08.24 |
---|---|
[Python]flask의 errorhandler와 Exception 예제로 이해하기(파이썬) (0) | 2023.08.23 |
[Python]vue, axios란? 간단한 console 출력 예제 실습으로 이해하기(flask, 파이썬, log) (0) | 2023.08.18 |
[Python] flask Jinja2 for문, if문, 리스트 출력 예제 실습 및 풀이 (0) | 2023.08.17 |
[Python]flask와 Jinja2 사용해서 변수 출력하기 예제(Variable) (0) | 2023.08.16 |