跳到内容

OkHttp 2.x 变更日志

版本 2.7.5

2016-02-25

  • 修复:更改证书固定器以始终构建完整链。这可以防止在使用 Google Play Services 安全提供者进行证书固定时发生潜在的崩溃。

版本 2.7.4

2016-02-07

  • 修复:如果安装了 Play Services (GMS) 安全提供者,在查找信任管理器时不会崩溃。
  • 修复:上一版本在 Android 上引入了性能回归,原因是查找 CA 证书。此问题现已修复。

版本 2.7.3

2016-02-06

  • 修复:允许信任的 CA 根证书被 CertificatePinner 固定。

版本 2.7.2

2016-01-07

  • 修复:在缓存命中时,不要急切地释放流分配。我们可能仍需要它们来处理重定向。

版本 2.7.1

2016-01-01

  • 修复:不要对新创建的连接进行健康检查。这是不必要的工作,如果健康检查失败,可能会使客户端处于不一致的状态。

版本 2.7.0

2015-12-13

  • 重写连接管理。 以前 OkHttp 的连接池管理 HTTP/2 的空闲和活动连接,但只管理 HTTP/1.x 的空闲连接。通过此次更新,连接池管理所有协议的空闲和活动连接。OkHttp 现在会检测并警告已分配但从未释放的连接,并会强制执行 HTTP/2 流限制。本次更新还修复了 Call.cancel() 不在调用线程上执行 I/O 的问题。
  • 修复:在日志拦截器中不记录 gzipped 数据。
  • 修复:通过 SOCKS 代理连接时,不解析 DNS 地址。
  • 修复:移除合成的 OkHttp-Selected-Protocol 响应头。
  • 修复:在日志拦截器中支持 204 和 205 ‘无内容’ 响应。
  • 新增:添加 Call.isExecuted() 方法。

版本 2.6.0

2015-11-22

  • 新增日志拦截器。 logging-interceptor 子项目提供简单的请求和响应日志记录。可以配置它来记录头部和正文以便调试。它需要此 Maven 依赖项

    <dependency>
      <groupId>com.squareup.okhttp</groupId>
      <artifactId>logging-interceptor</artifactId>
      <version>2.6.0</version>
    </dependency>
    

    基本日志配置如下

    HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
    loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
    client.networkInterceptors().add(loggingInterceptor);
    

    警告: 在生产环境中避免使用 Level.HEADERSLevel.BODY,因为它们可能将密码和其他认证凭据泄露到不安全的日志中。

  • WebSocket API 现在使用 RequestBodyResponseBody 处理消息。 这是一项向后不兼容的 API 变更。

  • DNS 服务现在是可插拔的。 在某些情况下,这对于手动优先处理特定 IP 地址可能很有用。

  • 修复:将 HttpUrl 转换为 java.net.URI 时不再抛出异常。以前,包含 |[ 等特殊字符的 URL 在受到 URI 过分严格的验证时会出错。

  • 修复:在编码的 URL 查询字符串中,不将 + 重新编码为 %20。OkHttp 在自己编码时偏好使用 %20,但在提供了 + 时会保留它。
  • 修复:强制要求调用者在发生 IO 错误时调用 WebSocket.close()。WebSocket 中的错误处理得到显著改进。
  • 修复:不对 HTTP/2 请求头使用 SPDY/3 风格的头部拼接。这可能会破坏多个同名头部(如 cookies)的请求。
  • 修复:拒绝 URL 主机名中的无效字符。以前,\0 等字符在构建请求时会导致后期崩溃。
  • 修复:允许拦截器更改请求方法。
  • 修复:通过 HTTP 隧道连接到 HTTPS 服务器时,不使用请求的 User-AgentProxy-AuthorizationProxy-Authorization 头部被泄露到源服务器。
  • 修复:数字可用于 URL scheme 中。
  • 修复:改善连接超时恢复。
  • 修复:恢复受 Android 4.2.2 之前版本影响的 getsockname 崩溃问题。
  • 修复:移除对 HTTP/1.0 的部分支持。以前,OkHttp 在看到带有 HTTP/1.0 的响应后,会在连接上发送 HTTP/1.0。修复后的行为与 Firefox 和 Chrome 一致。
  • 修复:允许在 OPTIONS 请求中包含请求体。
  • 修复:不对 URL fragment 中的非 ASCII 字符进行百分比编码。
  • 修复:处理 null fragments。
  • 修复:对于在尝试连接之前抛出 IOException 的拦截器,不会崩溃。
  • 新增:支持 WebDAV HTTP 方法。
  • 新增:缓存 WebSocket 帧以提高性能。
  • 新增:移除对 TLS_DHE_DSS_WITH_AES_128_CBC_SHA 的支持,这是我们唯一剩余的 DSS 加密套件。这与 Firefox 和 Chrome 一致,它们也已移除这些加密套件。

版本 2.5.0

2015-08-25

  • 超时现在默认为 10 秒。 以前我们默认永不超时,这是一个糟糕的策略。如果建立连接、从连接读取下一个字节或向连接写入下一个字节花费超过 10 秒,您需要手动调整超时设置。

  • OkHttp 现在拒绝包含无效字符的请求头部。 这包括潜在的安全问题(换行符)以及简单的非 ASCII 字符(包括国际字符和表情符号)。

  • 调用取消更可靠。 我们以前有一个 bug,当应用程序使用 Call.cancel() 时,正在连接的套接字未关闭。

  • 更改 HttpUrl 的 scheme 现在会跟踪默认端口。 我们以前有一个 bug,将 URL 从 http 更改为 https 时会使其保留在 80 端口上。

  • Okio 已更新至 1.6.0。

    <dependency>
      <groupId>com.squareup.okio</groupId>
      <artifactId>okio</artifactId>
      <version>1.6.0</version>
    </dependency>
    

  • 新增:Cache.initialize()。在后台线程中调用此方法可以立即初始化响应缓存。

  • 新增:将 MockWebServerRule 合并到 MockWebServer 中。这使得使用 MockWebServer 编写 JUnit 测试更加容易。MockWebServer 库现在依赖于 JUnit,但它仍然适用于所有测试框架。
  • 修复:FormEncodingBuilder 现在与浏览器在转义字符方面保持一致。以前我们没有对逗号、括号和其他字符进行百分比编码。
  • 修复:放宽对 FormEncodingBuilder 的限制,支持构建空表单。
  • 修复:超时现在抛出 SocketTimeoutException,而不是 InterruptedIOException
  • 修复:更改 MockWebServer,使其在确定 HTTP 请求是否允许请求体时使用与 OkHttp 相同的逻辑。
  • 修复:HttpUrl 现在使用 IPv6 地址的规范形式。
  • 修复:内部使用 HttpUrl
  • 修复:恢复 Android 4.2.2 EBADF 崩溃问题。
  • 修复:如果 HTTP/2 或 SPDY 写入失败导致连接处于不一致状态,不会以 IllegalStateException 崩溃。
  • 修复:确保默认用户代理是 ASCII 字符。

版本 2.4.0

2015-05-22

  • 禁止 HTTP 204 和 205 响应中的响应体。 返回此类格式错误的响应的 Web 服务器现在会在客户端触发 ProtocolException

  • WebSocketListener 有不兼容的变更。 onOpen() 方法现在在读取器线程上调用,因此实现必须在此方法返回后才能接收后续的 websocket 消息。onFailure() 方法现在包含返回的 HTTP 响应(如果存在)。

版本 2.4.0-RC1

2015-05-16

  • 新的 HttpUrl API。 它就像 java.net.URL,但更好用。请注意,Request.Builder.url() 现在在 URL 格式错误时抛出 IllegalArgumentException。(以前的版本在调用格式错误的 URL 时会抛出 MalformedURLException。)

  • 我们改进了连接失败恢复。 我们现在区分设置、连接中和已连接状态,并为每个状态实现适当的恢复规则。这使得 Address 不再使用 ConnectionSpec。(这是一个不兼容的 API 变更)。

  • FormEncodingBuilder 现在使用 %20 代替 + 进行空格编码。 两者都符合规范,但 %20 需要更少的特殊处理情况。

  • Okio 已更新至 1.4.0。

    <dependency>
      <groupId>com.squareup.okio</groupId>
      <artifactId>okio</artifactId>
      <version>1.4.0</version>
    </dependency>
    

  • 如果需要请求体,Request.Builder 不再接受 null。 对于需要请求体的方法,传递 null 现在会失败。请改用空请求体,如下所示

        RequestBody.create(null, new byte[0]);
    
  • CertificatePinner 现在支持通配符主机名。 与证书固定一样,您必须非常小心,避免 破坏 您的应用程序。您需要固定顶级域和 *. 域以实现全面覆盖。

     client.setCertificatePinner(new CertificatePinner.Builder()
         .add("publicobject.com",   "sha1/DmxUShsZuNiqPQsX2Oi9uv2sCnw=")
         .add("*.publicobject.com", "sha1/DmxUShsZuNiqPQsX2Oi9uv2sCnw=")
         .add("publicobject.com",   "sha1/SXxoaOSEzPC6BgGmxAt/EAcsajw=")
         .add("*.publicobject.com", "sha1/SXxoaOSEzPC6BgGmxAt/EAcsajw=")
         .add("publicobject.com",   "sha1/blhOM3W9V/bVQhsWAcLYwPU6n24=")
         .add("*.publicobject.com", "sha1/blhOM3W9V/bVQhsWAcLYwPU6n24=")
         .add("publicobject.com",   "sha1/T5x9IXmcrQ7YuQxXnxoCmeeQ84c=")
         .add("*.publicobject.com", "sha1/T5x9IXmcrQ7YuQxXnxoCmeeQ84c=")
         .build());
    
  • 拦截器列表现在通过 OkHttpClient.clone() 进行深拷贝。 以前的克隆共享拦截器,这使得按请求定制拦截器变得困难。

  • 新增:Headers.toMultimap() 方法。

  • 新增:RequestBody.create(MediaType, ByteString) 方法。
  • 新增:ConnectionSpec.isCompatible(SSLSocket) 方法。
  • 新增:Dispatcher.getQueuedCallCount()Dispatcher.getRunningCallCount() 方法。这些方法对诊断很有用。
  • 修复:OkHttp 不再在池化连接之间共享超时设置。以前这导致某些应用程序在连接重用时崩溃。
  • 修复:OkApacheClient 现在允许空的 PUTPOST 请求。
  • 修复:Websockets 不再重新缓冲套接字流。
  • 修复:Websockets 现在能更好地处理关闭帧。
  • 修复:内容类型匹配现在不区分大小写。
  • 修复:Vary 头部在使用 android.net.http.HttpResponseCache 时不会丢失。
  • 修复:HTTP/2 在写入底层连接时没有强制执行流超时。现在已经修复。
  • 修复:call.proceed() 方法永远不会返回 null。这是一个调用取消方面的 bug。
  • 修复:当网络拦截器修改请求时,该更改现在反映在 Response.networkResponse() 中。
  • 修复:行为异常的缓存现在会抛出受检异常,而不是 NullPointerException
  • 修复:使用 HTTP/2 时,MockWebServer 中未捕获异常的处理得到改善。

版本 2.3.0

2015-03-16

  • 支持 HTTP/2。 我们已经进行了互操作性测试,没有发现任何问题。HTTP/2 支持是一项重大努力,我们特别感谢 Adrian Cole 帮助我们达到了这个里程碑。

  • 默认不再支持 RC4 加密套件。 要连接依赖这些加密套件的旧的、过时的服务器,您必须创建一个自定义的 ConnectionSpec

  • Beta 版 WebSockets 支持。okhttp-ws 子项目提供一个新的 websockets 客户端。请尝试一下!当它准备就绪时,我们打算将其包含在核心 OkHttp 库中。

  • Okio 已更新至 1.3.0。

    <dependency>
      <groupId>com.squareup.okio</groupId>
      <artifactId>okio</artifactId>
      <version>1.3.0</version>
    </dependency>
    
  • 修复:提高异步请求的并行度。 OkHttp 的 Dispatcher 的 ExecutorService 配置有误,限制了工作线程的数量。如果您正在使用 Call.enqueue(),本次更新应显著提高请求并发性。

  • 修复:延迟初始化响应缓存。 这避免了在 Android 主线程上初始化 OkHttp 时出现严格模式警告。

  • 修复:在 Android 4.4 上禁用 ALPN。 该版本的此功能不稳定,容易导致底层 OpenSSL 代码中出现原生崩溃。

  • 修复:当 If-None-MatchIf-Modified-Since 两个缓存头都适用时,不要同时发送它们。
  • 修复:当端口超出范围时立即失败。
  • 修复:为 multipart 请求体提供 Content-Length 头部。
  • 修复:如果明确禁止明文连接时尝试进行明文连接,则抛出 UnknownServiceException
  • 修复:当主机验证失败时,抛出 SSLPeerUnverifiedException
  • 修复:MockWebServer 显式关闭套接字。(在某些 Android 版本上,关闭套接字的输入流和输出流不足够。)
  • 修复:缓冲传出的 HTTP/2 帧,以限制创建的传出帧数量。
  • 修复:避免因磁盘已满导致缓存写入失败时崩溃。
  • 修复:改进私有响应的缓存。
  • 修复:更新默认缓存的响应码。
  • 修复:重用的 Request.Builder 实例不再保留陈旧的 URL 字段。
  • 新增:ConnectionSpec 现在可以配置为使用 SSL 套接字的默认加密套件。使用方法是将加密套件设置为 null
  • 新增:支持带有请求体的 DELETE 方法。
  • 新增:Headers.of(Map) 方法从 Map 创建头部。

版本 2.2.0

2014-12-30

  • RequestBody.contentLength() 现在抛出 IOException 这是一项源代码不兼容的变更。如果您的代码调用了 RequestBody.contentLength(),此次更新将导致编译失败。但这项变更是二进制兼容的:为 OkHttp 2.0 和 2.1 编译的代码在此次更新后仍可正常工作。

  • COMPATIBLE_TLS 不再支持 SSLv3。 为应对 POODLE 漏洞,OkHttp 在协商 HTTPS 连接时不再提供 SSLv3。如果您仍然需要连接运行 SSLv3 的 Web 服务器,则必须手动配置自己的 ConnectionSpec

  • OkHttp 现在提供拦截器。 拦截器是一个强大的机制,可以监控、重写和重试调用。拦截器文档 是对这个新 API 的全面介绍。

  • 新增:用于迭代和选择性清除响应缓存的 API。

  • 新增:支持 SOCKS 代理。
  • 新增:支持 TLS_FALLBACK_SCSV
  • 新增:将 HTTP/2 支持更新至 h2-16hpack-10
  • 新增:阻止重试非幂等请求的 API。
  • 修复:移除 NPN 支持。今后我们只支持 ALPN。
  • 修复:主机名验证器现在是严格的。这与现代浏览器中的主机名验证器一致。
  • 修复:改进对行为异常的 HTTP 代理的 CONNECT 处理。
  • 修复:不重试因超时失败的请求。
  • 修复:缓存包含适当响应头的 302 和 308 响应。
  • 修复:改善使用代理选择器的连接的连接池。
  • 修复:在桌面环境使用 ALPN 时,不会泄露连接。
  • 修复:将 Jetty ALPN 更新至 7.1.2.v20141202 (Java 7) 和 8.1.2.v20141202 (Java 8)。这修复了 TLS 会话恢复中的一个 bug,该 bug 可能导致选择了错误的协议。
  • 修复:在连接前断开连接时,SPDY 和 HTTP/2 不会崩溃。
  • 修复:避免对数字代理地址进行反向 DNS 查找。
  • 修复:恢复 http/2 帧日志记录功能。
  • 修复:将授权尝试次数限制为 20 次。

版本 2.1.0

2014-11-11

  • 新增:用于与加密套件和 TLS 版本交互的类型安全 API。
  • 修复:在混合授权挑战与上传重试时不会崩溃。

版本 2.1.0-RC1

2014-11-04

  • OkHttp 现在缓存私有响应。我们已从共享缓存更改为私有缓存,现在将存储使用 Authorization 头的响应。这意味着 OkHttp 的缓存不应用于位于用户代理和源服务器之间的中间设备上。

  • TLS 配置更新。 OkHttp 现在在支持的情况下显式启用 TLSv1.2、TLSv1.1 和 TLSv1.0。它将继续仅执行一次回退,到 SSLv3。应用程序现在可以使用 ConnectionSpec 类进行配置。

    要禁用 TLS 回退

    client.setConnectionSpecs(Arrays.asList(
        ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT));
    

    要禁用明文连接,仅允许 https URL

    client.setConnectionSpecs(Arrays.asList(
        ConnectionSpec.MODERN_TLS, ConnectionSpec.COMPATIBLE_TLS));
    
  • 新增加密套件。 请确认您的 Web 服务器可以通过这组有限的加密套件访问。

                                             Android
    Name                                     Version
    
    TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256  5.0
    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256    5.0
    TLS_DHE_RSA_WITH_AES_128_GCM_SHA256      5.0
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA     4.0
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA     4.0
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA       4.0
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA       4.0
    TLS_ECDHE_ECDSA_WITH_RC4_128_SHA         4.0
    TLS_ECDHE_RSA_WITH_RC4_128_SHA           4.0
    TLS_DHE_RSA_WITH_AES_128_CBC_SHA         2.3
    TLS_DHE_DSS_WITH_AES_128_CBC_SHA         2.3
    TLS_DHE_RSA_WITH_AES_256_CBC_SHA         2.3
    TLS_RSA_WITH_AES_128_GCM_SHA256          5.0
    TLS_RSA_WITH_AES_128_CBC_SHA             2.3
    TLS_RSA_WITH_AES_256_CBC_SHA             2.3
    SSL_RSA_WITH_3DES_EDE_CBC_SHA            2.3  (Deprecated in 5.0)
    SSL_RSA_WITH_RC4_128_SHA                 2.3
    SSL_RSA_WITH_RC4_128_MD5                 2.3  (Deprecated in 5.0)
    
  • Okio 已更新至 1.0.1。

    <dependency>
      <groupId>com.squareup.okio</groupId>
      <artifactId>okio</artifactId>
      <version>1.0.1</version>
    </dependency>
    
  • 新增 API 以方便进行证书固定。 请注意,证书固定是危险的,可能导致您的应用程序无法信任您的服务器!

  • 缓存改进。 本次版本修复了一些严重的缓存问题,包括在某些访问模式下缓存可能损坏的 bug。我们还修复了因日志损坏导致缓存被清除的 bug。我们新增了 API 用于配置请求的 Cache-Control 头部以及手动清除缓存。

  • 请求取消修复。 本次更新修复了同步请求无法通过标签取消的 bug。本次更新避免了在 onResponse() 抛出 IOException 时崩溃。该失败现在将被记录日志,而不是通知线程的未捕获异常处理程序。我们新增了一个 API Call.isCanceled() 来检查调用是否已取消。

  • 新增:更新 MultipartBuilder 以支持内容长度。

  • 新增:支持模拟 OkHttpClientCall
  • 新增:更新至 h2-14 和 hpack-9。
  • 新增:OkHttp 默认包含一个用户代理,例如 okhttp/2.1.0-RC1
  • 修复:处理响应码 308 永久重定向
  • 修复:如果调用被取消,不要跳过回调。
  • 修复:允许主机名包含下划线。
  • 修复:允许在 OkApacheClient 中覆盖 content-type。
  • 修复:直接连接使用套接字工厂。
  • 修复:遵循禁用重定向的 OkUrlFactory API。
  • 修复:并发修改 SPDY SPDY 设置时不会崩溃。

版本 2.0.0

本次版本承诺提供稳定的 2.0 API。有关从 1.x 升级到 2.x 的建议,请阅读 2.0.0-RC1 的变更。

2014-06-21

  • API 变更:在 Callback.onFailure() 中使用 IOException。这是一项源代码不兼容的变更,与 OkHttp 2.0.0-RC2 使用 Throwable 不同。
  • 修复:修复了一个缓存 bug,以前我们没有存储重写的请求头,例如 Accept-Encoding
  • 修复:修复了处理 SPDY 窗口大小的 bug。这曾导致某些大文件下载停滞。
  • 将语言级别更新至 Java 7。(OkHttp 需要 Android 2.3+ 或 Java 7+。)

版本 2.0.0-RC2

2014-06-11

本次更新修复了 2.0.0-RC1 中的问题。有关从 1.x 升级到 2.x 的建议,请阅读 2.0.0-RC1 的变更。

  • 修复:不泄露连接!2.0.0-RC1 中存在一个回归问题,连接既未关闭也未池化。
  • 修复:恢复 OkHttpClient 的超时方法的 Builder 风格返回类型,以实现与 OkHttp 1.x 的二进制兼容性。
  • 修复:在 SPDY/3.1 上不跳过客户端流 1。这修复了与 https://google.com 的 SPDY 连接问题,该网站不遵循 SPDY/3.1 规范!
  • 修复:始终配置 NPN 头部。当 SPDY 和 HTTP/2 都被禁用时,这修复了与 https://facebook.com 的连接问题。否则会收到意外的 NPN 响应,导致 OkHttp 崩溃。
  • 修复:当 HPACK 数据大于 16383 字节时,写入 continuation 帧。
  • 修复:不丢失异步调用中抛出的未捕获异常。
  • 修复:当请求体不合法时立即抛出异常。以前我们在构建请求时忽略了这个问题,只在之后以 NullPointerException 崩溃。
  • 修复:在 OkUrlFactory 响应中包含一个向后兼容的 OkHttp-Response-Source 头部。
  • 修复:在使用 Call API 发出的请求中不包含默认的 User-Agent 头部。使用 OkUrlFactory 发出的请求将继续包含默认的用户代理。
  • 新增:类似 Guava 的 API,用于创建头部

    Headers headers = Headers.of(name1, value1, name2, value2, ...).
    
  • 新增:请求体中的 content-type 头部现在是可选的。

  • 新增:Response.isSuccessful() 是一个方便的 API,用于检查响应码。
  • 新增:响应体现在可以在回调之外读取。响应体必须始终关闭,否则会泄露连接!
  • 新增:用于创建 multipart 请求体 (MultipartBuilder) 和 form encoding 请求体 (FormEncodingBuilder) 的 API。

版本 2.0.0-RC1

2014-05-23

OkHttp 2 围绕一个新的、忠于 HTTP 的 API 设计,包含请求、响应、头部和调用的类。它使用现代 Java 模式,如不可变性和链式构建器。API 现在除了同步阻塞调用之外,还提供异步回调。

API 变更

  • 新的 Request 和 Response 类型, 每个都有自己的构建器。还有一个 RequestBody 类用于将请求体写入网络,以及一个 ResponseBody 用于从网络读取响应体。独立的 Headers 类提供对 HTTP 头部的完整访问。

  • 新增 Okio 依赖。 OkHttp 现在依赖于 Okio,这是一个 I/O 库,可以更轻松地访问、存储和处理数据。在内部使用此库使 OkHttp 更快,同时消耗更少的内存。您可以将 RequestBody 写入 Okio 的 BufferedSink,将 ResponseBody 作为 Okio 的 BufferedSource 读取。标准 InputStreamOutputStream 访问也可用。

  • 新增 Call 和 Callback 类型 用于执行请求并接收响应。这两种类型的调用都可以通过 CallOkHttpClient 取消。

  • URLConnection 支持已移至 okhttp-urlconnection 模块。 如果您从 1.x 升级,此变更将影响您。您需要将 okhttp-urlconnection 模块添加到您的项目,并使用 OkUrlFactory 创建新的 HttpURLConnection 实例。

    // OkHttp 1.x:
    HttpURLConnection connection = client.open(url);
    
    // OkHttp 2.x:
    HttpURLConnection connection = new OkUrlFactory(client).open(url);
    
  • 不再支持自定义缓存。 在 OkHttp 1.x 中,可以使用 java.net.ResponseCache 和 OkHttp 的 OkResponseCache 接口定义自己的响应缓存。这两个 API 都已移除。在 OkHttp 2 中,内置的磁盘缓存是唯一支持的响应缓存。

  • HttpResponseCache 已重命名为 Cache。 请使用 OkHttpClient.setCache(...) 安装它,而不是 OkHttpClient.setResponseCache(...)

  • OkAuthenticator 已替换为 Authenticator。 这个新的认证器可以访问完整的传入响应,并可以使用任何适当的后续请求进行响应。Challenge 类现在是一个顶级类,Credential 已替换为一个名为 Credentials 的工具类。

  • OkHttpClient.getFollowProtocolRedirects() 已重命名为 getFollowSslRedirects()。我们将 protocol 一词保留给正在使用的 HTTP 版本(HTTP/1.1、HTTP/2)。这个方法的旧名称具有误导性;它一直用于配置 https://http:// scheme 之间的重定向。

  • RouteDatabase 不再是公共 API。 OkHttp 继续跟踪哪些路由失败,但此信息不再在 API 中暴露。

  • ResponseSource 已移除。 这个枚举暴露了响应是来自缓存、网络还是两者。OkHttp 2 在新的 Response 类中通过对缓存和网络响应的原始访问提供了更多细节。

  • TunnelRequest 已移除。 它指定了如何连接到 HTTP 代理。OkHttp 2 对此使用新的 Request 类。

  • Dispatcher 是一个新类,用于管理异步调用的队列。它实现了对总在途调用数和每主机在途调用数的限制。

实现变更

  • 支持 Android TrafficStats 套接字标签。
  • 重定向时移除认证头部。
  • 新增支持压缩数据帧。
  • 按顺序处理 push promise 回调。
  • 更新到 http/2 draft 12。
  • 更新到 HPACK draft 07。
  • 新增 ALPN 支持。Maven 将在 OpenJDK 8 上使用 ALPN。
  • 更新 NPN 依赖项,目标为 jdk7u60-b13Oracle jdk7u55-b13
  • 确保 SPDY 变体支持零长度的 DELETE 和 POST。
  • 防止在元数据读取失败时泄露缓存项的 InputStream。
  • 在路由中使用字符串标识 TLS 版本。
  • 新增 HTTP/2 帧日志记录器。
  • httpMinorVersion 替换为 Protocol。将 HTTP/1.0 暴露为一个潜在协议。
  • 使用 Protocol 描述帧结构。
  • 实现 HTTP/1.1 流的写入超时。
  • 避免使用 SPDY 流 ID 1,因为它通常用于 UPGRADE。
  • Authenticator 中支持 OAuth。
  • 允许媒体类型解析中出现悬空分号。

版本 1.x

变更日志