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,使瀏覽器在跨來源請求中傳送 cookie 與驗證標頭。對於任何需要憑證的請求,不能與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 建構函式引數。
- expose_headers: list | None¶
瀏覽器可向 JavaScript 公開的回應標頭清單,或為
None以省略Access-Control-Expose-Headers標頭。對應 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 標頭。