如何使用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
相关产品推荐
相关产品推荐

