microdot.cors — Kaynaklar Arası Kaynak Paylaşımı (CORS)¶
Bir tarayıcının, bir kaynakta (origin) çalışan JavaScript’in farklı bir kaynaktaki kamera barındırmalı uç noktalarınızı çağırmasına izin vermesi için gereken başlıkları ekler. Sınıf, kendisini uygulamanın OPTIONS işleyicisine (ön kontrol istekleri için) ve istek sonrası kancasına (normal yanıtlardaki Access-Control-* başlıkları için) bağlar.
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
Bağlanılacak
microdot.Microdotörneği. Bağlamayı ertelemek içinNoneolabilir; daha sonrainitialize()çağrılır.- allowed_origins
Bir origin dizeleri listesi (
["https://app.example.com"]) veya herhangi bir origin’e izin vermek için tam değerli'*'. Bu listeyle eşleşmeyen origin’ler hiçbir CORS başlığı almaz; tarayıcı bunu “bu isteğe izin verilmez” şeklinde yorumlar.- allow_credentials
Trueise, tarayıcının kaynaklar arası isteklerle çerezleri ve auth başlıklarını göndermesi içinAccess-Control-Allow-Credentials: trueekler. Kimlik bilgisi gerektiren herhangi bir istek içinallowed_origins='*'ile birlikte kullanılamaz (tarayıcılar bu kombinasyonu reddeder).- allowed_methods
Tarayıcının kaynaklar arası kullanabileceği metotlar listesi (
['GET', 'POST']).Noneherhangi biri anlamına gelir.- expose_headers
Tarayıcının JavaScript’e açabileceği yanıt başlığı adlarının listesi.
- allowed_headers
İstemcilerin kaynaklar arası dahil edebileceği istek başlığı adlarının listesi.
Noneherhangi biri anlamına gelir (ön kontrolünAccess-Control-Request-Headersbaşlığını yansıtır).- max_age
Tarayıcının ön kontrol sonucunu önbelleğe alabileceği saniye sayısı. Bunun atlanması, tarayıcının her ön kontrolü yeniden doğrulaması anlamına gelir.
- handle_cors
Falseise, sınıf yapılandırılır ancak kendisini gerçekten bağlamaz –get_cors_headers()çıktısını başka bir ara katman yazılımıyla elle birleştirmek istediğinizde kullanışlıdır.
- initialize(app: Microdot, handle_cors: bool = True)¶
Yapılandırma ertelendiyse app öğesine bağlanır.
- get_cors_headers(request) dict¶
request için geçerli olan
Access-Control-*başlıkları kümesini hesaplar. İstek sonrası kanca tarafından dahili olarak kullanılır; uygulamalar, özel ara katman yazılımından CORS başlıkları yayarken bunu doğrudan çağırabilir.
- allowed_origins: list | str | None¶
Yapılandırılmış origin’ler listesi veya tam değerli
'*'. allowed_origins yapıcı argümanını yansıtır; politikayı nesneyi yeniden oluşturmadan değiştirmek için çalışma zamanında yeniden atayın.
- allow_credentials: bool¶
Eşleşen isteklerde
Access-Control-Allow-Credentials: trueyayılıp yayılmadığı. allow_credentials yapıcı argümanını yansıtır.
- allowed_methods: list | None¶
Kaynaklar arası izin verilen metot adlarının listesi veya “herhangi biri” için
None. allowed_methods yapıcı argümanını yansıtır.
- expose_headers: list | None¶
Tarayıcının JavaScript’e açabileceği yanıt başlıklarının listesi veya
Access-Control-Expose-Headersbaşlığını atlamak içinNone. expose_headers yapıcı argümanını yansıtır.
Örnek:
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}
Ön kontrol OPTIONS isteği otomatik olarak işlenir; kamera uygun Access-Control-* başlıklarını ve 204 No Content döndürür. Asıl GET / POST / vb. yanıtları, kayıtlı istek sonrası kanca aracılığıyla Access-Control-Allow-Origin başlığını alır.