microdot.cors --- Berbagi Sumber Daya Lintas Asal¶
Menambahkan header yang diperlukan browser untuk mengizinkan JavaScript yang berjalan di satu asal untuk memanggil endpoint yang di-host kamera pada asal yang berbeda. Kelas ini mengaitkan dirinya ke handler OPTIONS aplikasi (untuk permintaan preflight) dan hook setelah-permintaan (untuk header Access-Control-* pada respons normal).
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
Instans
microdot.Microdotyang akan dilampirkan. BolehNoneuntuk menunda pemasangan; panggilinitialize()nanti.- allowed_origins
Daftar string asal (
["https://app.example.com"]) atau literal'*'untuk mengizinkan semua asal. Asal yang tidak cocok dengan daftar ini tidak mendapatkan header CORS, yang diinterpretasikan browser sebagai "permintaan ini tidak diizinkan".- allow_credentials
Jika
True, tambahkanAccess-Control-Allow-Credentials: trueagar browser mengirimkan cookie dan header auth dengan permintaan lintas asal. Tidak dapat digunakan denganallowed_origins='*'untuk permintaan yang membutuhkan kredensial (browser menolak kombinasi tersebut).- allowed_methods
Daftar metode (
['GET', 'POST']) yang boleh digunakan browser secara lintas asal.Noneberarti semua.- expose_headers
Daftar nama header respons yang boleh diekspos browser ke JavaScript.
- allowed_headers
Daftar nama header permintaan yang boleh disertakan klien secara lintas asal.
Noneberarti semua (menggemakanAccess-Control-Request-Headersdari preflight).- max_age
Detik yang boleh digunakan browser untuk menyimpan cache hasil preflight. Jika tidak diisi, browser memvalidasi ulang setiap preflight.
- handle_cors
Jika
False, kelas dikonfigurasi tetapi tidak benar-benar melampirkan dirinya -- berguna saat Anda ingin menggabungkan keluaranget_cors_headers()-nya secara manual dengan middleware lain.
- get_cors_headers(request) dict¶
Hitung kumpulan header
Access-Control-*yang berlaku untuk request. Digunakan secara internal oleh hook setelah-permintaan; aplikasi dapat memanggilnya langsung saat memancarkan header CORS dari middleware kustom.
- allowed_origins: list | str | None¶
Daftar asal yang dikonfigurasi, atau literal
'*'. Mencerminkan argumen konstruktor allowed_origins; tetapkan ulang saat runtime untuk mengubah kebijakan tanpa membangun ulang objek.
- allow_credentials: bool¶
Apakah
Access-Control-Allow-Credentials: truedipancarkan pada permintaan yang cocok. Mencerminkan argumen konstruktor allow_credentials.
- allowed_methods: list | None¶
Daftar nama metode yang diizinkan secara lintas asal, atau
Noneuntuk "semua". Mencerminkan argumen konstruktor allowed_methods.
- expose_headers: list | None¶
Daftar header respons yang boleh diekspos browser ke JavaScript, atau
Noneuntuk menghilangkan headerAccess-Control-Expose-Headers. Mencerminkan argumen konstruktor expose_headers.
Contoh:
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}
Permintaan OPTIONS preflight ditangani secara otomatis; kamera mengembalikan header Access-Control-* yang sesuai dan 204 No Content. Respons GET / POST / dll. yang sebenarnya mendapatkan header Access-Control-Allow-Origin melalui hook setelah-permintaan yang terdaftar.