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ọiinitialize()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êmAccess-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ớiallowed_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.Nonenghĩ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.
Nonenghĩa là bất kỳ (echo lạiAccess-Control-Request-Headerscủ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 raget_cors_headers()của nó với middleware khác.
- 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: truecó đượ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
Nonecho "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 headerAccess-Control-Expose-Headers. Phản ánh đối số constructor expose_headers.
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ý.