如何强制 okhttp 使用 http/2 进行请求?
How can I force okhttp to use http/2 for a request?
我想发出请求并强制其使用协议。HTTP_2。
我试过下面的代码:
import okhttp3.{OkHttpClient, Protocol, Request}
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
object Main2 extends App {
val url = "https://google.com/"
val client = new OkHttpClient.Builder().protocols(ListBuffer(Protocol.HTTP_2)).build()
val request = new Request.Builder().url(url).build()
val response = client.newCall(request).execute()
println(response.body().string())
}
但是出现错误:线程 "main" java.lang.IllegalArgumentException 中出现异常:协议不包含 http/1.1: [h2]
OkHttp 会自动使用 HTTP/2 如果它可用,但你不能禁用 HTTP/1.1.
如果您不使用 SSL/TLS,您可以在创建 OkHttpClient 时使用 Protocol.H2_PRIOR_KNOWLEDGE
而不是 Protocol.HTTP_2
。
这将发送一个明文 HTTP/2,它不会首先与服务协商要使用的协议。
对我来说,当服务器多路复用 HTTP/1.1 和 HTTP/2.
时,这会强制 HTTP/2
来源:https://square.github.io/okhttp/3.x/okhttp/okhttp3/Protocol.html#H2_PRIOR_KNOWLEDGE
我想发出请求并强制其使用协议。HTTP_2。 我试过下面的代码:
import okhttp3.{OkHttpClient, Protocol, Request}
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
object Main2 extends App {
val url = "https://google.com/"
val client = new OkHttpClient.Builder().protocols(ListBuffer(Protocol.HTTP_2)).build()
val request = new Request.Builder().url(url).build()
val response = client.newCall(request).execute()
println(response.body().string())
}
但是出现错误:线程 "main" java.lang.IllegalArgumentException 中出现异常:协议不包含 http/1.1: [h2]
OkHttp 会自动使用 HTTP/2 如果它可用,但你不能禁用 HTTP/1.1.
如果您不使用 SSL/TLS,您可以在创建 OkHttpClient 时使用 Protocol.H2_PRIOR_KNOWLEDGE
而不是 Protocol.HTTP_2
。
这将发送一个明文 HTTP/2,它不会首先与服务协商要使用的协议。
对我来说,当服务器多路复用 HTTP/1.1 和 HTTP/2.
时,这会强制 HTTP/2来源:https://square.github.io/okhttp/3.x/okhttp/okhttp3/Protocol.html#H2_PRIOR_KNOWLEDGE