microdot.cors --- Chia sẻ Tài nguyên Cross-Origin

Thêm các header mà trình duyệt cần để cho phép JavaScript chạy trên một origin gọi đến các endpoint được lưu trữ trên camera của bạn từ một origin khác. Lớp này tự đăng ký vào handler OPTIONS của ứng dụng (cho các yêu cầu preflight) và hook sau yêu cầu (cho các header Access-Control-* trong các phản hồi thông thường).

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

Phiên bản microdot.Microdot để gắn vào. Có thể là None để trì hoãn việc gắn; gọi initialize() sau.

allowed_origins

Danh sách chuỗi origin (["https://app.example.com"]) hoặc ký tự '*' để cho phép bất kỳ origin nào. Các origin không khớp với danh sách này sẽ không nhận được header CORS, mà trình duyệt hiểu là "yêu cầu này không được phép".

allow_credentials

Nếu là True, thêm Access-Control-Allow-Credentials: true để trình duyệt gửi cookie và header xác thực cùng với các yêu cầu cross-origin. Không thể sử dụng với allowed_origins='*' cho các yêu cầu cần thông tin xác thực (trình duyệt từ chối kết hợp đó).

allowed_methods

Danh sách các phương thức (['GET', 'POST']) mà trình duyệt có thể sử dụng cross-origin. None nghĩa là bất kỳ.

expose_headers

Danh sách tên header phản hồi mà trình duyệt có thể hiển thị cho JavaScript.

allowed_headers

Danh sách tên header yêu cầu mà client có thể bao gồm cross-origin. None nghĩa là bất kỳ (echo lại Access-Control-Request-Headers của preflight).

max_age

Số giây mà trình duyệt có thể cache kết quả preflight. Bỏ qua nghĩa là trình duyệt xác nhận lại mỗi preflight.

handle_cors

Nếu là False, lớp được cấu hình nhưng không tự gắn vào -- hữu ích khi bạn muốn kết hợp thủ công đầu ra get_cors_headers() của nó với middleware khác.

initialize(app: Microdot, handle_cors: bool = True)

Gắn vào app nếu việc khởi tạo bị trì hoãn.

get_cors_headers(request) dict

Tính toán tập hợp các header Access-Control-* áp dụng cho request. Được sử dụng nội bộ bởi hook sau yêu cầu; ứng dụng có thể gọi trực tiếp khi phát ra header CORS từ middleware tùy chỉnh.

allowed_origins: list | str | None

Danh sách origin đã được cấu hình, hoặc ký tự '*'. Phản ánh đối số constructor allowed_origins; gán lại khi chạy để thay đổi chính sách mà không cần xây dựng lại đối tượng.

allow_credentials: bool

Cho biết liệu Access-Control-Allow-Credentials: true có được phát ra trong các yêu cầu khớp hay không. Phản ánh đối số constructor allow_credentials.

allowed_methods: list | None

Danh sách tên phương thức được phép cross-origin, hoặc None cho "bất kỳ". Phản ánh đối số constructor allowed_methods.

expose_headers: list | None

Danh sách header phản hồi mà trình duyệt có thể hiển thị cho JavaScript, hoặc None để bỏ qua header Access-Control-Expose-Headers. Phản ánh đối số constructor expose_headers.

allowed_headers: list | None

Danh sách tên header yêu cầu được chấp nhận cross-origin, viết thường, hoặc None cho "echo lại bất cứ điều gì preflight yêu cầu". Phản ánh đối số constructor allowed_headers (constructor viết thường danh sách trước khi lưu trữ).

max_age: int | None

Số giây mà trình duyệt có thể cache phản hồi preflight, hoặc None để bỏ qua header Access-Control-Max-Age. Phản ánh đối số constructor max_age.

Ví dụ:

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}

Yêu cầu preflight OPTIONS được xử lý tự động; camera trả về các header Access-Control-* phù hợp và 204 No Content. Các phản hồi GET / POST / v.v. thực tế nhận header Access-Control-Allow-Origin thông qua hook sau yêu cầu đã được đăng ký.