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çin None olabilir; daha sonra initialize() ç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

True ise, tarayıcının kaynaklar arası isteklerle çerezleri ve auth başlıklarını göndermesi için Access-Control-Allow-Credentials: true ekler. Kimlik bilgisi gerektiren herhangi bir istek için allowed_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']). None herhangi 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. None herhangi biri anlamına gelir (ön kontrolün Access-Control-Request-Headers baş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

False ise, 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: true yayı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-Headers başlığını atlamak için None. expose_headers yapıcı argümanını yansıtır.

allowed_headers: list | None

Kaynaklar arası kabul edilen istek başlığı adlarının küçük harfe çevrilmiş listesi veya “ön kontrolün istediği her neyse onu yansıt” için None. allowed_headers yapıcı argümanını yansıtır (yapıcı, listeyi saklamadan önce küçük harfe çevirir).

max_age: int | None

Tarayıcının ön kontrol yanıtını önbelleğe alabileceği saniye sayısı veya Access-Control-Max-Age başlığını atlamak için None. max_age 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.