1.7. CORS


通常,HTTP 客户端无法在不同域间发出请求。

例如,假设您与 Kafka 集群一同部署的 Kafka Bridge 可以使用 http://my-bridge.io 域访问。HTTP 客户端可以使用 URL 与 Kafka Bridge 交互,并通过 Kafka 集群交换信息。但是,您的客户端作为 web 应用程序在 http://my-web-application.io 域中运行。客户端(源)域与 Kafka Bridge (目标)域不同。由于相同的策略限制,来自客户端的请求会失败。您可以使用跨资源共享(CORS)来避免这种情况。

CORS 允许在不同的域中的原始源之间的 simplepreflighted 请求。

简单请求适用于使用 GETHEADPOST 方法的标准请求。

预先修改的请求将 HTTP OPTIONS 请求作为初始检查,用于检查实际请求是安全的发送。确认时会发送实际请求。preflight 请求适合需要更大保护的方法,如 PUTDELETE,并使用非标准标头。

所有请求都需要在其标头中有一个 origin 值,即 HTTP 请求的来源。

您可以通过 CORS 指定在 Kafka Bridge HTTP 配置中访问 Kafka 集群的方法和原始 URL。

Kafka Bridge 的 CORS 配置示例

# ...
http.cors.enabled=true
http.cors.allowedOrigins=http://my-web-application.io
http.cors.allowedMethods=GET,POST,PUT,DELETE,OPTIONS,PATCH

1.7.1. 简单请求

例如:这个简单请求标头将源指定为 http://my-web-application.io

Origin: http://my-web-application.io

标头信息将添加到使用记录的请求中。

curl -v -X GET HTTP-BRIDGE-ADDRESS/consumers/my-group/instances/my-consumer/records \
-H 'Origin: http://my-web-application.io'\
-H 'content-type: application/vnd.kafka.v2+json'

在 Kafka Bridge 的响应中,会返回 Access-Control-Allow-Origin 标头。它包含从其中将 HTTP 请求发出到网桥的域列表。

HTTP/1.1 200 OK
Access-Control-Allow-Origin: * 
1
1
返回星号(*)显示任何域可以访问的资源。

1.7.2. Preflighted 请求

使用 OPTIONS 方法将初始 preflight 请求发送到 Kafka Bridge。HTTP OPTIONS 请求会发送标头信息,以检查 Kafka Bridge 是否允许实际请求。

此处的 preflight 请求会检查 POST 请求是否来自 http://my-web-application.io

OPTIONS /my-group/instances/my-consumer/subscription HTTP/1.1
Origin: http://my-web-application.io
Access-Control-Request-Method: POST 
1

Access-Control-Request-Headers: Content-Type 
2
1
Kafka Bridge 被提醒,实际请求是一个 POST 请求。
2
实际请求将使用 Content-Type 标头发送。

OPTIONS 添加到 preflight 请求的标题信息中。

curl -v -X OPTIONS -H 'Origin: http://my-web-application.io' \
-H 'Access-Control-Request-Method: POST' \
-H 'content-type: application/vnd.kafka.v2+json'

Kafka Bridge 响应初始请求,以确认请求将被接受。响应标头返回允许的源、方法和标头。

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://my-web-application.io
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS,PATCH
Access-Control-Allow-Headers: content-type

如果 origin 或 方法被拒绝,则返回错误消息。

实际请求不需要 Access-Control-Request-Method 标头,因为它在 preflight 请求中确认,但它需要 origin 标头。

curl -v -X POST HTTP-BRIDGE-ADDRESS/topics/bridge-topic \
-H 'Origin: http://my-web-application.io' \
-H 'content-type: application/vnd.kafka.v2+json'

该响应显示允许原始 URL。

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://my-web-application.io
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部