🐶

何も考えたくないFlaskのCORS対応【備忘録】

2021/11/03に公開

はじめに

ローカル(ブラウザ上)でサーバ API を叩こうとして、CORS エラーが起こったので対処法。これはセキュリティ的な意味での使用で、別オリジンのサーバからのリクエストは受け付けなくなっている様子。

サンプルコード

以下で基本的に別のサーバからの通信を受け付けるようになります。「supports_credentials」を true にすることにより、「Access-Control-Allow-Credentials」ヘッダーが挿入され、ユーザが認証されたリクエストを行えるようになります。

from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(
    app,
    supports_credentials=True
)

ただし、上記はすべてのオリジン、すべての method([GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE])、すべての http ヘッダーが許可されます。なので、引数には適宜「origins」、「methods」や「allow_headers」を設定するのが望ましいと考えます。一応「resources」引数によってもっと詳細に設定を変えることができるみたいです。

おわりに

CORS に対しては、とりあえずネットで取得できるくらいの情報は持っているつもりでしたが、ただそれを前提としてもライブラリの使用方法が下記の doc にもそんなに詳しく書いてなかったので困りました(当然ですが日本語の資料はほとんどなく、Stack Overflow にもこれといったスニペットはない感じでした)。まぁ、これでローカルでの GUI 開発がし易くなりました。

参考

Discussion