Computer365120 views
高校物理158224 views
雑学1472593 views
高校生物549842 views
中学数学621382 views
英語607877 views
中学理科1626207 views
小学理科717236 views
高校化学2913383 views
高校倫理1433119 views
Help
Tools

English

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_credentialsCookie や認証情報の送信を許可

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 と組み合わせると、セキュリティリスクが高まる。許可するオリジンは必要最小限に絞ること。