CORS 中间件¶
此中间件提供了一个全面、可配置的 CORS(跨域资源共享)规范的实现,作为 oslo 支持的 python wsgi 中间件。
注意
虽然此中间件支持在规范中使用 * 通配符 origin,但出于安全原因不建议使用此功能。它旨在简化 CORS 的基本用法,实际上意味着“我不关心如何使用它”。在内网环境中,这可能导致数据泄露到内网之外,因此应避免使用。
快速入门¶
首先,在您的应用程序中包含中间件
from oslo_middleware import cors
app = cors.CORS(your_wsgi_application)
其次,添加您需要的允许的 origin
app.add_origin(allowed_origin='https://website.example.com:443',
allow_credentials=True,
max_age=3600,
allow_methods=['GET','PUT','POST','DELETE'],
allow_headers=['X-Custom-Header'],
expose_headers=['X-Custom-Header'])
# ... add more origins here.
oslo_config 的配置¶
提供了一个工厂方法,以简化使用 oslo_config 配置 CORS 域。
from oslo_middleware import cors
from oslo_config import cfg
app = cors.CORS(your_wsgi_application, cfg.CONF)
在您的应用程序的配置文件中,包含如下配置块
[cors]
allowed_origin=https://website.example.com:443,https://website2.example.com:443
max_age=3600
allow_methods=GET,POST,PUT,DELETE
allow_headers=X-Custom-Header
expose_headers=X-Custom-Header
pastedeploy 的配置¶
如果您的应用程序正在使用 pastedeploy,则以下配置块将添加 CORS 支持。
[filter:cors]
use = egg:oslo.middleware#cors
allowed_origin=https://website.example.com:443,https://website2.example.com:443
max_age=3600
allow_methods=GET,POST,PUT,DELETE
allow_headers=X-Custom-Header
expose_headers=X-Custom-Header
如果您的应用程序正在使用 pastedeploy,但同时也希望使用 oslo_config 中的现有配置以简化配置点,可以按如下方式操作。
[filter:cors]
use = egg:oslo.middleware#cors
oslo_config_project = oslo_project_name
# Optional field, in case the program name is different from the project:
oslo_config_program = oslo_project_name-api
配置选项¶
cors¶
- allowed_origin¶
- 类型:
列表
- 默认值:
<None>
指示是否允许与请求“origin”标头中接收到的域共享此资源。格式:“<protocol>://<host>[:<port>]”,不带尾部斜杠。示例:https://horizon.example.com
- allow_credentials¶
- 类型:
布尔值
- 默认值:
True
指示实际请求是否可以包含用户凭据
- expose_headers¶
- 类型:
列表
- 默认值:
[]
指示哪些标头可以安全地暴露给 API。默认值为 HTTP 简单标头。
- max_age¶
- 类型:
整数
- 默认值:
3600
CORS 预检请求的最大缓存时间。
- allow_methods¶
- 类型:
列表
- 默认值:
['OPTIONS', 'GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'TRACE', 'PATCH']
指示实际请求期间可以使用哪些方法。
- allow_headers¶
- 类型:
列表
- 默认值:
[]
指示实际请求期间可以使用哪些标头字段名称。
模块文档¶
- class oslo_middleware.cors.AllowedOrigin¶
- class oslo_middleware.cors.CORS(application: WSGIApplication | None, conf: dict[str, ty.Any] | cfg.ConfigOpts | None = None)¶
CORS 中间件。
此中间件允许 WSGI 应用程序为多个配置的域提供 CORS 标头。
有关更多信息,请参阅 http://www.w3.org/TR/cors/
- add_origin(allowed_origin: str | list[str], allow_credentials: bool = True, expose_headers: list[str] | None = None, max_age: int | None = None, allow_methods: list[str] | None = None, allow_headers: list[str] | None = None) None¶
添加另一个 origin 到此过滤器。
- 参数:
allowed_origin – 允许的 origin 的协议、主机和端口。
allow_credentials – 是否允许凭据。
expose_headers – 要暴露的标头列表。
max_age – 最大缓存持续时间。
allow_methods – 允许的 HTTP 方法列表。
allow_headers – 允许客户端的 HTTP 标头列表。
- 返回值:
- classmethod factory(global_conf: dict[str, ty.Any] | None, **local_conf: ty.Any) ty.Callable[[WSGIApplication], base.MiddlewareType]¶
paste.deploy 的工厂方法
allowed_origin: 允许的 origin 的协议、主机和端口。 allow_credentials: 是否允许凭据。 expose_headers: 要暴露的标头列表。 max_age: 最大缓存持续时间。 allow_methods: 允许的 HTTP 方法列表。 allow_headers: 允许客户端的 HTTP 标头列表。
- process_response(response: Response, request: Request | None = None) Response¶
检查 CORS 标头,并在必要时进行装饰。
执行两个检查。首先,如果发出 OPTIONS 请求,则让应用程序处理它,并(如果需要)用预检标头装饰响应。在这种情况下,如果底层应用程序抛出 404(即如果底层应用程序不处理 OPTIONS 请求,则会覆盖响应代码)。
在所有其他请求的情况下,应用常规请求标头。
- exception oslo_middleware.cors.InvalidOriginError(origin: str)¶
当 Origin 无效时引发的异常。
- oslo_middleware.cors.filter_factory(global_conf: dict[str, ty.Any] | None, **local_conf: ty.Any) ty.Callable[[WSGIApplication], base.MiddlewareType]¶
paste.deploy 的工厂方法
allowed_origin: 允许的 origin 的协议、主机和端口。 allow_credentials: 是否允许凭据。 expose_headers: 要暴露的标头列表。 max_age: 最大缓存持续时间。 allow_methods: 允许的 HTTP 方法列表。 allow_headers: 允许客户端的 HTTP 标头列表。
- oslo_middleware.cors.set_defaults(**kwargs: Opt) None¶
覆盖配置选项的默认值。
此方法允许项目覆盖默认 CORS 选项值。例如,它可能希望提供一组合理的默认标头,使其只需进行最少的额外配置即可正常工作。
- 参数:
allow_credentials (bool) – 是否允许凭据。
expose_headers (List of Strings) – 要暴露的标头列表。
max_age (Int) – 最大缓存持续时间(秒)。
allow_methods (List of Strings) – 允许的 HTTP 方法列表。
allow_headers (List of Strings) – 允许客户端的 HTTP 标头列表。