You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Gateway与WebFlux间HTTP2未启用问题排查及配置求助

问题描述

我搭建了基于Netty的响应式技术栈,Spring Cloud Gateway(SCG)和WebFlux应用均已启用HTTP2,但SCG路由到WebFlux时仍采用HTTP/1.1通信,具体配置与验证情况如下:

SCG配置

server:
  port: 8080
  shutdown: graceful
  http2:
    enabled: true

spring:
  cloud:
    gateway:
      routes:
        - id: id
          uri: https://localhost:8081/
          predicates:
            - Path= ...

WebFlux配置

server:
  http2:
    enabled: true
  port: 8081
  shutdown: graceful

验证情况

已通过curl命令确认两个应用均支持HTTP2:

curl --http2-prior-knowledge localhost:8080/~~ -v
curl --http2-prior-knowledge localhost:8081/~~ -v

但WebFlux的Netty访问日志显示,SCG转发的请求使用的是HTTP/1.1:

// webflux server's netty log
2024-04-19 11:17:15,318 INFO  reactor.netty.http.server.AccessLog : 127.0.0.6 - - [19/4월/2024:11:17:15 +0900] "GET /hello HTTP/1.1" 200 350 15

需解答以下问题:

  1. 为何SCG路由至WebFlux时未使用HTTP2
  2. 如何启用SCG与目标服务间的HTTP2通信

解答

1. 未使用HTTP2的原因

Spring Cloud Gateway默认不会自动启用与后端服务的HTTP2通信,即便双方都支持HTTP2,核心原因有两点:

  • SCG路由URI使用https://或http://协议头时,默认客户端配置基于HTTP/1.1,不会主动升级到HTTP2
  • SCG默认的Reactor Netty HttpClient未开启HTTP2支持,因此发起的后端请求仍为HTTP/1.1

2. 启用SCG与WebFlux间HTTP2通信的配置步骤

方式一:全局启用HTTP2客户端支持

在SCG的配置文件中添加Reactor Netty HttpClient的HTTP2配置:

spring:
  cloud:
    gateway:
      httpclient:
        http2:
          enabled: true

方式二:针对单个路由启用HTTP2(可选)

若仅需特定路由使用HTTP2,可在路由配置中添加metadata属性:

spring:
  cloud:
    gateway:
      routes:
        - id: id
          uri: https://localhost:8081/
          predicates:
            - Path= ...
          metadata:
            http2: true

额外注意事项

  • 确保后端WebFlux服务已正确启用HTTP2(你的现有配置已满足要求)
  • 若使用自签名证书,需配置SCG的HttpClient信任该证书,否则HTTPS通信会失败,无法建立HTTP2连接

内容的提问来源于stack exchange,提问作者hkjaaaip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:55:19