Flask の CORS 設定
CORS(Cross-Origin Resource Sharing)は、異なるオリジン間での HTTP リクエストを制御する仕組みである。Flask で API を公開する際、フロントエンドが別ドメインから呼び出す場合は CORS の設定が必要になる。
CORS とは
ブラウザはセキュリティ上、異なるオリジンへのリクエストを制限している。たとえば http://frontend.example.com から http://api.example.com への Ajax リクエストは、API 側が明示的に許可しないとブラウザにブロックされる。
Flask-CORS のインストール
pip install flask-cors基本的な使い方
すべてのルートで CORS を有効にするには、以下のように設定する。
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)これですべてのオリジンからのリクエストが許可される。
特定のオリジンのみ許可
本番環境では許可するオリジンを限定すべきである。
CORS(app, origins=['https://frontend.example.com'])複数のオリジンを許可する場合はリストで指定する。
特定のルートのみに適用
デコレータを使えば、個別のルートに CORS を設定できる。
from flask_cors import cross_origin
@app.route('/api/data')
@cross_origin(origins=['https://frontend.example.com'])
def get_data():
return {'data': 'value'}詳細なオプション
CORS(app,
origins=['https://frontend.example.com'],
methods=['GET', 'POST', 'PUT', 'DELETE'],
allow_headers=['Content-Type', 'Authorization'],
supports_credentials=True)| origins | 許可するオリジン |
| methods | 許可する HTTP メソッド |
| allow_headers | 許可するリクエストヘッダー |
| supports_credentials | Cookie や認証情報の送信を許可 |
Blueprint への適用
Blueprint 単位で CORS を設定することもできる。
from flask import Blueprint
from flask_cors import CORS
api_bp = Blueprint('api', __name__)
CORS(api_bp, origins=['https://frontend.example.com'])セキュリティ上の注意
origins='*' ですべてのオリジンを許可するのは、パブリック API 以外では避けるべきである。特に supports_credentials=True と組み合わせると、セキュリティリスクが高まる。許可するオリジンは必要最小限に絞ること。










