协议是管理设备之间数据交换或传输的一组规则。在人机交互层(应用程序可访问网络服务的层面)上,最重要的协议之一是 HTTP(超文本传输协议)。
HTTP 是一种成熟的协议,有多个版本,每个版本都增加了相对旧版本的性能改进特性。HTTP/1.1 和 HTTP/2 目前在互联网上广泛部署。HTTP/1.1 已存在十余年;2015 年 IETF(互联网工程任务组)引入了 HTTP/2,带来多项可缩短页面加载时间的特性。要了解 HTTP/1.1 与 HTTP/2 的差异,请参阅 HTTP/2 versus HTTP/1.1 ↗。
| Free | Pro | Business | Enterprise | |
|---|---|---|---|---|
Availability | Yes | Yes | Yes | Yes |
在 Cloudflare,到源站的 HTTP/2 连接默认已启用。
若要禁用 HTTP/2 to Origin,可按以下步骤操作:
-
在 Cloudflare 仪表板中,前往 Speed(速度) > Settings(设置) 页面。
Go to Settings ↗ -
前往 Protocol Optimization(协议优化) 选项卡,在 HTTP/2 to Origin(到源站的 HTTP/2) 下将开关设为 Off(关闭)。
Cloudflare 支持从其全球边缘网络到你的源站服务器使用 HTTP/2 多路复用。无需为每个传入请求打开新的 TCP 连接,多个 HTTP/2 流可共享一条长生命周期的 TCP 连接。这显著降低了连接建立与拆除的开销,提升 Cloudflare 与源站之间的效率与性能。
通过将许多请求汇入更少的 TCP 连接,Cloudflare 降低了源站必须维持的活动连接数——对连接开销或资源限制敏感的后端尤其有价值。
当新请求到达时,Cloudflare 会尝试复用到源站的现有 HTTP/2 连接:
- 若该连接尚未达到并发流限制,Cloudflare 会在同一连接上多路复用该请求。
- 若已达到流限制,Cloudflare 会按需打开新的 TCP 连接。
连接会保持存活并复用,直到空闲或触及并发限制。
-
连接复用:Cloudflare 维持到源站的持久(keep-alive)TCP 连接。复用持续到达到 HTTP/2 流限制或连接变为空闲。
-
空闲超时(900 秒):若连接保持空闲(无活动流)达 900 秒,Cloudflare 会关闭它。尝试复用已关闭的连接可能导致
520错误。 -
Keep-alives:Cloudflare 发送周期性 TCP keep-alive 以检测无响应的源站。两次探测均无应答后,连接会被重置。
- 首次探测约在空闲 30 秒后
- 第二次探测间隔 15 秒
-
连接拆除:连接也可能因以下原因关闭:
- 负载均衡决策
- 数据中心或节点维护
- 达到最大并发限制
- 源站或中间网络关闭空闲连接
| 优势 | 描述 |
|---|---|
| 更少的 TCP 握手 | 多个请求共享一条长生命周期 TCP 连接,最大限度减少连接抖动。 |
| 更低延迟 | 避免重复的 TCP/TLS 握手,减少新请求的往返延迟。 |
| 降低源站负载 | 源站需管理的并发连接更少,减轻资源受限系统的压力。 |
| 自适应扩展 | 在流量激增时(例如故障转移),Cloudflare 会先复用可用流,再按需打开新连接。 |
| 计划 | 默认状态 | 每个连接的最大并发流 | 可配置? |
|---|---|---|---|
| Free / Pro / Business | 默认启用 | 200 | 否 |
| Enterprise | 默认禁用(每个连接 1 个流) | 1–200+ | 是 |
- Free/Pro/Business:多路复用自动启用。每个连接最多支持 200 个并发流。
- Enterprise:多路复用实质上从禁用(1 个流)开始。你可按 zone 启用并配置并发(最高 200+ 个并发流)。
连接多路复用在 Free、Pro 和 Business zone 上默认启用,默认最多使用 100 个并发流。Enterprise 计划可在仪表板或通过 API 显式配置 zone 的最大并发流数(通常称为“多路复用比率”)。
仪表板
- 登录 Cloudflare 仪表板 ↗ 并选择你的账户。
- 选择将使用 HTTP/2 to Origin 的域名。
- 选择 Speed(速度) > Optimization(优化)。
- 打开 Protocol Optimization(协议优化) 选项卡。
- 在 HTTP/2 to Origin(HTTP/2 到源站) 下,选择 Configure(配置) 并按需调整流设置。
API
Required API token permissions
At least one of the following token permissions is required:Zone Settings WriteZone Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/settings/origin_h2_max_streams" \
--request PATCH \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"value": 100
}'更多信息请参阅 API 文档。
Terraform
resource "cloudflare_zone_setting" "example" {
zone_id = "<ZONE_ID>"
setting_id = "origin_h2_max_streams"
value = 50
}| 条件 | 默认值 / 范围 | 错误代码 | 描述 |
|---|---|---|---|
| Proxy Read Timeout | 125 秒(Enterprise 最高 6000 秒) | 524 |
源站响应过久。 |
| Proxy Idle Timeout | 900 秒(固定) | 520 |
因空闲而关闭连接。 |
| TCP Keep-Alive Interval | 首次 30 秒,探测间隔 15 秒 | 520 |
两次探测未应答后,Cloudflare 重置连接。 |
| TCP Handshake Timeout | 19 秒 | 522 |
源站未完成 SYN 握手。 |
| TCP ACK Timeout | 90 秒 | 522 |
源站停止确认数据。 |
故障转移事件
当流量突然转移时(例如源站故障转移),Cloudflare 会尽可能复用活动连接。若达到并发限制,则会打开新连接。活动连接数可能短暂激增,但总体总连接数仍低于未使用多路复用时。
长生命周期或空闲请求
- 若请求超过 125 秒(例如流式传输),请提高 Proxy Read Timeout(仅 Enterprise)。
- 比 900 秒更快关闭连接的源站可能经历连接抖动,但 Cloudflare 会在需要时自动重新建立新连接。
可能的 5xx 错误
部分 5xx 错误(如 520 或 522)可能与空闲超时或源站不可达有关。若对能力不足的源站将并发设得过高,同时请求突发可能压垮源站,导致流重置或短暂的 5xx 尖峰。遇到此情况的 Enterprise 客户可联系 Cloudflare 客户团队或支持降低并发限制,从而减少同时发往源站的请求数,有助于防止过载。
Free、Pro 和 Business 计划每个连接使用 200 个并发流。Enterprise 用户可配置 1–200+ 个流。
Cloudflare 首先复用现有 keep-alive 连接。若达到并发限制,再按需打开新连接。即使在流量激增时,总连接数通常也低于未使用多路复用时。
Enterprise 用户可降低并发限制。Cloudflare 也会遵循源站的 SETTINGS_MAX_CONCURRENT_STREAMS,允许你的服务器强制更严格的限制。Cloudflare 的 CDN 还提供 Cache Locking,有助于在重新验证期间避免对源站发起多个并行请求。更多信息请参阅 Revalidation。
可以。你可以逐步调整源站的 HTTP/2 设置或 Cloudflare 的 zone 设置,以安全地提高并发。
Cloudflare 运营扁平的 anycast 网络。任何数据中心都可能直接连接到你的源站——没有 L1/L2 层级。源站连接可能来自全球多个数据中心。
不会。连接按需创建并尽可能复用。没有持久的空闲连接池。
空闲连接在 900 秒无活动后关闭。不会主动重新打开;流量恢复时再创建新连接。
仅当源站关闭它们、发生网络错误,或 Cloudflare 进行维护或负载再分配时。活动连接没有硬性最大生命周期。
请注意,若源站不支持 HTTP/2,Cloudflare 将发起 HTTP/1.1 连接。 我们通过 ALPN ↗ 连接到宣布支持 HTTP/2 的服务器。
若不确定服务器是否支持 HTTP/2,建议查阅源站服务器文档,或使用 HTTP/2 实现测试工具(例如 h2spec ↗)。