microdot.cors --- 跨源资源共享¶
添加浏览器所需的标头,以允许运行在某一源上的 JavaScript 调用你托管于摄像头上、位于不同源的端点。该类会将自身接入应用程序的 OPTIONS 处理程序(用于预检请求)和请求后钩子(用于在正常响应上添加 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,以便浏览器在跨源请求中发送 cookie 和身份验证标头。对于任何需要凭据的请求,不能与allowed_origins='*'一起使用(浏览器会拒绝该组合)。- allowed_methods
浏览器可用于跨源的方法列表(
['GET', 'POST'])。None表示任意方法。- expose_headers
浏览器可向 JavaScript 公开的响应标头名称列表。
- allowed_headers
客户端可在跨源请求中包含的请求标头名称列表。
None表示任意(回显预检请求的Access-Control-Request-Headers)。- max_age
浏览器可缓存预检结果的秒数。省略该项意味着浏览器会对每次预检重新校验。
- handle_cors
如果为
False,该类已配置但不会实际附加自身——当你想要手动将其get_cors_headers()的输出与其他中间件结合时很有用。
- get_cors_headers(request) dict¶
计算适用于 request 的
Access-Control-*标头集合。由请求后钩子内部使用;应用程序在从自定义中间件发出 CORS 标头时可直接调用它。
- allowed_origins: list | str | None¶
已配置的源列表,或字面量
'*'。映射构造函数参数 allowed_origins;可在运行时重新赋值以更改策略而无需重建对象。
- allow_credentials: bool¶
是否在匹配的请求上发出
Access-Control-Allow-Credentials: true。映射构造函数参数 allow_credentials。
- expose_headers: list | None¶
浏览器可向 JavaScript 公开的响应标头列表,或表示省略
Access-Control-Expose-Headers标头的None。映射构造函数参数 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}
预检 OPTIONS 请求会被自动处理;摄像头返回相应的 Access-Control-* 标头和 204 No Content。实际的 GET / POST 等响应会通过已注册的请求后钩子获得 Access-Control-Allow-Origin 标头。