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

如何使用Groovy创建HTTP/2连接 替换现有HTTP/1.1连接方式

你目前使用的URL.openConnection()返回的HttpURLConnection是JDK早期的HTTP客户端实现,本身不支持HTTP/2,因此没有可指定协议版本的相关配置,可通过以下两种常用方案实现HTTP/2连接:

方案1:使用JDK 11+ 内置HttpClient(无额外依赖)

JDK 11及以上版本自带的java.net.http.HttpClient原生支持HTTP/2,Groovy可以直接调用,语法可大幅简化,示例代码如下:

import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
import java.net.URI

// 构建HttpClient,显式指定优先使用HTTP/2
def httpClient = HttpClient.newBuilder()
        .version(HttpClient.Version.HTTP_2)
        .build()

// 构建请求
def request = HttpRequest.newBuilder()
        .uri(URI.create("https://目标服务地址"))
        .GET()
        .build()

// 同步发送请求
def response = httpClient.send(request, HttpResponse.BodyHandlers.ofString())

// 打印实际使用的协议版本验证
println "实际使用协议:${response.version()}"
println "响应状态码:${response.statusCode()}"
println "响应内容:${response.body()}"

如果目标服务端支持HTTP/2,以上代码会自动使用HTTP/2协议通信,服务端不支持时会自动降级为HTTP/1.1,不影响正常使用。

方案2:使用OkHttp库(兼容低版本JDK)

如果项目使用的JDK版本低于11,可以接入OkHttp库实现HTTP/2连接,OkHttp默认开启HTTP/2支持,无需额外复杂配置。
首先在项目中引入OkHttp依赖,以Gradle配置为例:

implementation 'com.squareup.okhttp3:okhttp:4.12.0'

Groovy调用示例:

import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Protocol

// 可显式指定协议优先级,也可直接用默认配置new OkHttpClient()
def client = new OkHttpClient.Builder()
        .protocols([Protocol.HTTP_2, Protocol.HTTP_1_1])
        .build()

def request = new Request.Builder()
        .url("https://目标服务地址")
        .build()

try (def response = client.newCall(request).execute()) {
    println "实际使用协议:${response.protocol()}"
    println "响应内容:${response.body().string()}"
}

如果确认目标服务端明确支持HTTP/2,还可以将协议设置为H2_PRIOR_KNOWLEDGE,跳过协议协商步骤,提升连接效率。

注意事项
  • 两种方案都要求目标服务端本身支持HTTP/2,否则会自动降级到HTTP/1.1,属于正常现象
  • HTTP/2的TLS加密场景要求TLS版本至少为1.2,请确认你的JDK运行环境TLS配置符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:36:05