microdot.cors --- クロスオリジンリソース共有¶
あるオリジンで実行されている JavaScript が、別のオリジンにあるカメラホスト型のエンドポイントを呼び出せるようにするためにブラウザが必要とするヘッダーを追加します。このクラスは、アプリケーションの OPTIONS ハンドラ(プリフライトリクエスト用)とリクエスト後フック(通常の応答に付与する Access-Control-* ヘッダー用)に自身を組み込みます。
class CORS¶
- class microdot.cors.CORS(app: Microdot | None = None, allowed_origins=None, allow_credentials: bool = False, allowed_methods: list | None = None, expose_headers: list | None = None, allowed_headers: list | None = None, max_age: int | None = None, handle_cors: bool = True)¶
- app
アタッチ先の
microdot.Microdotインスタンス。アタッチを遅延させるためにNoneにすることもできます。後でinitialize()を呼び出してください。- allowed_origins
オリジン文字列のリスト(
["https://app.example.com"])、または任意のオリジンを許可するリテラル'*'。このリストに一致しないオリジンには CORS ヘッダーが付与されず、ブラウザはこれを「このリクエストは許可されていない」と解釈します。- allow_credentials
Trueの場合、Access-Control-Allow-Credentials: trueを追加し、ブラウザがクロスオリジンリクエストでクッキーや認証ヘッダーを送信するようにします。資格情報を必要とするリクエストではallowed_origins='*'と併用できません(ブラウザがその組み合わせを拒否します)。- allowed_methods
ブラウザがクロスオリジンで使用できるメソッドのリスト(
['GET', 'POST'])。Noneは任意を意味します。- expose_headers
ブラウザが JavaScript に公開できる応答ヘッダー名のリスト。
- allowed_headers
クライアントがクロスオリジンで含めることができるリクエストヘッダー名のリスト。
Noneは任意を意味します(プリフライトのAccess-Control-Request-Headersをそのまま返します)。- max_age
ブラウザがプリフライト結果をキャッシュできる秒数。これを省略すると、ブラウザはプリフライトごとに再検証します。
- handle_cors
Falseの場合、クラスは設定されますが実際には自身をアタッチしません。get_cors_headers()の出力を他のミドルウェアと手動で組み合わせたい場合に便利です。
- get_cors_headers(request) dict¶
request に適用される
Access-Control-*ヘッダーのセットを計算します。リクエスト後フックによって内部的に使用されます。アプリケーションは、カスタムミドルウェアから CORS ヘッダーを出力する際に直接呼び出すこともできます。
- allowed_origins: list | str | None¶
設定されたオリジンのリスト、またはリテラル
'*'。コンストラクタ引数 allowed_origins を反映します。オブジェクトを再構築せずにポリシーを変更するには、実行時に再代入してください。
- allow_credentials: bool¶
一致するリクエストで
Access-Control-Allow-Credentials: trueが出力されるかどうか。コンストラクタ引数 allow_credentials を反映します。
- allowed_methods: list | None¶
クロスオリジンで許可されるメソッド名のリスト、または「任意」を表す
None。コンストラクタ引数 allowed_methods を反映します。
- expose_headers: list | None¶
ブラウザが JavaScript に公開できる応答ヘッダーのリスト、または
Access-Control-Expose-Headersヘッダーを省略する場合のNone。コンストラクタ引数 expose_headers を反映します。
例:
from microdot import Microdot
from microdot.cors import CORS
app = Microdot()
CORS(app,
allowed_origins=['https://dashboard.example.com'],
allow_credentials=True,
max_age=86400)
@app.get('/api/status')
async def status(request):
return {'ok': True}
プリフライトの OPTIONS リクエストは自動的に処理されます。カメラは適切な Access-Control-* ヘッダーと 204 No Content を返します。実際の GET / POST などの応答は、登録されたリクエスト後フックを介して Access-Control-Allow-Origin ヘッダーを取得します。