CORS 指南

Zaqar 现在支持跨域资源共享 (CORS)。该功能由 oslo.middleware 提供。请参阅 官方文档OpenStack 规范 以获取更多详细信息。本指南主要告诉用户如何在 Zaqar 中使用它。

新的配置选项

有一些新的配置选项。

allowed_origin

指示是否允许将此资源与请求“origin”标头中接收到的域共享。格式:“<协议>://<主机>[:<端口>]”,不带尾部斜杠。例如:https://horizon.example.com’。

allow_credentials

指示实际请求是否可以包含用户凭据。默认值为 True。

expose_headers

指示哪些标头可以安全地暴露给 API。默认值为 HTTP 简单标头。默认值为 []。

max_age

CORS 预检请求的最大缓存时间。默认值为 3600。

allow_methods

指示实际请求期间可以使用哪些方法。默认值为 [‘OPTIONS’, ‘GET’, ‘HEAD’, ‘POST’, ‘PUT’, ‘DELETE’, ‘TRACE’, ‘PATCH’]。

allow_headers

指示实际请求期间可以使用哪些标头字段名称。默认值为 []。

请求和响应示例

CORS 功能默认在 Zaqar 中启用。这是一个配置示例:

[cors]
allowed_origin = http://example
allow_methods = GET

上述示例配置选项意味着 Zaqar 仅接收来自 http://example 域的 GET 请求。以下是一些示例请求:1. 如果请求不包含“Origin”标头,Zaqar 将不执行任何操作

# curl -I -X GET http://10.229.47.217:8888 -H "Accept: application/json"

HTTP/1.1 300 Multiple Choices
content-length: 668
content-type: application/json; charset=UTF-8
Connection: close

2. 如果“Origin”不在 allowed_origin 中,Zaqar 将不在响应标头中返回任何内容

# curl -I -X GET http://10.229.47.217:8888 -H "Accept: application/json" -H "Origin: http://"

HTTP/1.1 300 Multiple Choices
content-length: 668
content-type: application/json; charset=UTF-8
Connection: close

在 Zaqar 日志中,我们可以看到一条消息

CORS request from origin 'http://' not permitted.

3. 如果“Origin”标头在 allowed_origin 中,Zaqar 将返回 CORS 信息

# curl -I -X GET http://10.229.47.217:8888 -H "Accept: application/json" -H "Origin: http://example"

HTTP/1.1 300 Multiple Choices
content-length: 668
content-type: application/json; charset=UTF-8
Vary: Origin
Access-Control-Allow-Origin: http://example
Access-Control-Allow-Credentials: true
Connection: close

4. 如果请求不符合 Zaqar 的 CORS 规则,Zaqar 将返回更多信息

# curl -I -X PUT http://10.229.47.217:8888 -H "Accept: application/json" -H "Origin: http://example"
HTTP/1.1 405 Method Not Allowed
content-length: 0
content-type: application/json; charset=UTF-8
allow: GET, OPTIONS
Vary: Origin
Access-Control-Allow-Origin: http://example
Access-Control-Allow-Credentials: true
Connection: close