microdot.cors — שיתוף משאבים בין מקורות (CORS)¶
מוסיף את הכותרות שדפדפן זקוק להן כדי לאפשר ל-JavaScript הרץ במקור אחד לקרוא לנקודות הקצה המתארחות במצלמה שלכם במקור אחר. המחלקה משלבת את עצמה ב-handler של OPTIONS של היישום (עבור בקשות preflight) ובהוק שאחרי הבקשה (עבור כותרות 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כך שהדפדפן שולח cookies וכותרות אימות בבקשות בין-מקוריות. לא ניתן להשתמש עםallowed_origins='*'עבור כל בקשה הזקוקה לאישורים (דפדפנים דוחים שילוב זה).- allowed_methods
רשימת מתודות (
['GET', 'POST']) שהדפדפן רשאי להשתמש בהן בין-מקורית.Noneפירושו כל מתודה.- expose_headers
רשימה של שמות כותרות תגובה שהדפדפן רשאי לחשוף ל-JavaScript.
- allowed_headers
רשימה של שמות כותרות בקשה שלקוחות רשאים לכלול בין-מקורית.
Noneפירושו כל אחת (מהדהד אתAccess-Control-Request-Headersשל ה-preflight).- max_age
שניות שהדפדפן רשאי לשמור במטמון את תוצאת ה-preflight. דילוג על כך פירושו שהדפדפן מאמת מחדש כל preflight.
- handle_cors
אם
False, המחלקה מוגדרת אך אינה מחברת את עצמה בפועל – שימושי כאשר תרצו לשלב באופן ידני את הפלט שלget_cors_headers()עם middleware אחר.
- get_cors_headers(request) dict¶
מחשבת את קבוצת כותרות ה-
Access-Control-*החלות על request. בשימוש פנימי על ידי ההוק שאחרי הבקשה; יישומים יכולים לקרוא לה ישירות בעת פליטת כותרות CORS מ-middleware מותאם אישית.
- 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, או
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}
בקשת ה-preflight OPTIONS מטופלת אוטומטית; המצלמה מחזירה את כותרות ה-Access-Control-* המתאימות ו-204 No Content. תגובות GET / POST / וכו« בפועל מקבלות את כותרת Access-Control-Allow-Origin באמצעות ההוק הרשום שאחרי הבקשה.