【问题标题】:How can I force okhttp to use http/2 for a request?如何强制 okhttp 使用 http/2 进行请求?
【发布时间】:2016-08-22 13:52:26
【问题描述】:

我想提出一个请求并强制它使用 Protocol.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 http2


    【解决方案1】:

    如果 HTTP/2 可用,OkHttp 将自动使用它,但您不能禁用 HTTP/1.1。

    【讨论】:

    • 如果我的服务器多路复用 HTTP/1.1 和 HTTP/2,它似乎不起作用
    【解决方案2】:

    如果您不使用 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

    【讨论】:

      猜你喜欢
      • 2015-08-20
      • 2020-12-02
      • 2014-08-25
      • 2011-12-23
      • 2021-06-27
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 2011-08-30
      相关资源
      最近更新 更多