跳转到内容
搜索文档

HTTP/2 to Origin

最后更新 查看 MarkdownAgent 设置

协议是管理设备之间数据交换或传输的一组规则。在人机交互层(应用程序可访问网络服务的层面)上,最重要的协议之一是 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

可用性

FreeProBusinessEnterprise

Availability

Yes

Yes

Yes

Yes

禁用 HTTP/2 to Origin

在 Cloudflare,到源站的 HTTP/2 连接默认已启用。

若要禁用 HTTP/2 to Origin,可按以下步骤操作:

  1. 在 Cloudflare 仪表板中,前往 Speed(速度) > Settings(设置) 页面。

    Go to Settings ↗
  2. 前往 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 的最大并发流数(通常称为“多路复用比率”)。

仪表板

  1. 登录 Cloudflare 仪表板 并选择你的账户。
  2. 选择将使用 HTTP/2 to Origin 的域名。
  3. 选择 Speed(速度) > Optimization(优化)
  4. 打开 Protocol Optimization(协议优化) 选项卡。
  5. HTTP/2 to Origin(HTTP/2 到源站) 下,选择 Configure(配置) 并按需调整流设置。

API

Required API token permissions

At least one of the following token permissions is required:
  • Zone Settings Write
  • Zone Write
Change Origin H2 Max Streams Settingbash
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 错误(如 520522)可能与空闲超时或源站不可达有关。若对能力不足的源站将并发设得过高,同时请求突发可能压垮源站,导致流重置或短暂的 5xx 尖峰。遇到此情况的 Enterprise 客户可联系 Cloudflare 客户团队或支持降低并发限制,从而减少同时发往源站的请求数,有助于防止过载。

常见问题

Cloudflare 是否使用固定的多路复用比率?

Free、Pro 和 Business 计划每个连接使用 200 个并发流。Enterprise 用户可配置 1–200+ 个流。

在尖峰或故障转移期间 Cloudflare 如何扩展连接?

Cloudflare 首先复用现有 keep-alive 连接。若达到并发限制,再按需打开新连接。即使在流量激增时,总连接数通常也低于未使用多路复用时。

如果我的后端对并行请求敏感怎么办?

Enterprise 用户可降低并发限制。Cloudflare 也会遵循源站的 SETTINGS_MAX_CONCURRENT_STREAMS,允许你的服务器强制更严格的限制。Cloudflare 的 CDN 还提供 Cache Locking,有助于在重新验证期间避免对源站发起多个并行请求。更多信息请参阅 Revalidation

我可以逐步提高并发吗?

可以。你可以逐步调整源站的 HTTP/2 设置或 Cloudflare 的 zone 设置,以安全地提高并发。

Cloudflare 从何处连接到我的源站?

Cloudflare 运营扁平的 anycast 网络。任何数据中心都可能直接连接到你的源站——没有 L1/L2 层级。源站连接可能来自全球多个数据中心。

Cloudflare 会预热到源站的连接吗?

不会。连接按需创建并尽可能复用。没有持久的空闲连接池。

如何管理空闲连接?

空闲连接在 900 秒无活动后关闭。不会主动重新打开;流量恢复时再创建新连接。

Cloudflare 会关闭活动的 TCP 连接吗?

仅当源站关闭它们、发生网络错误,或 Cloudflare 进行维护或负载再分配时。活动连接没有硬性最大生命周期。

协议兼容性

请注意,若源站不支持 HTTP/2,Cloudflare 将发起 HTTP/1.1 连接。 我们通过 ALPN 连接到宣布支持 HTTP/2 的服务器。

若不确定服务器是否支持 HTTP/2,建议查阅源站服务器文档,或使用 HTTP/2 实现测试工具(例如 h2spec)。

这篇文档对您有帮助吗?