小学算数1197058 views
小学社会308993 views
高校物理158718 views
高校国語786382 views
中学社会667518 views
中学理科1627838 views
世界の国561710 views
いろは2995081 views
高校倫理1435514 views
ヒストリア286202 views

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