okhttp 3.9.0 已发布，该版本包括大量 bug 修复，以及新功能，具体如下：
Version 3.9.0 2017-09-03
Interceptors are more capable. The
Chaininterface now offers access to the call and can adjust all call timeouts. Note that this change is source-incompatible for code that implements the
Chaininterface. We don't expect this to be a problem in practice!
OkHttp has an experimental new API for tracking metrics. The new
EventListenerAPI is designed to help developers monitor HTTP requests' size and duration. This feature is an unstable preview: the API is subject to change, and the implementation is incomplete. This is a big new API we are eager for feedback.
New: Support ALPN via Google Play Services' Dynamic Security Provider. This expands HTTP/2 support to older Android devices that have Google Play Services.
New: Consider all routes when looking for candidate coalesced connections. This increases the likelihood that HTTP/2 connections will be shared.
New: Authentication challenges and credentials now use a charset. Use this in your authenticator to support user names and passwords with non-ASCII characters.
New: Accept a charset in
FormBody.Builder. Previously form bodies were always UTF-8.
New: Support the
Fix: Don't crash when an HTTP/2 call is redirected while the connection is being shut down.
Fix: Don't drop headers of healthy streams that raced with
GOAWAYframes. This bug would cause HTTP/2 streams to occasional hang when the connection was shutting down.
OkHttpClient.retryOnConnectionFailure()when the response is a HTTP 408 Request Timeout. If retries are enabled, OkHttp will retry exactly once in response to a 408.
Fix: Don't crash when reading the empty
HEADresponse body if it specifies a
Fix: Don't crash if the thread is interrupted while reading the public suffix database.
Fix: Use relative resource path when loading the public suffix database. Loading the resource using a path relative to the class prevents conflicts when the OkHttp classes are relocated (shaded) by allowing multiple private copies of the database.
Fix: Accept cookies for URLs that have an IPv6 address for a host.
Fix: Don't log the protocol (HTTP/1.1, h2) in HttpLoggingInterceptor if the protocol isn't negotiated yet! Previously we'd log HTTP/1.1 by default, and this was confusing.
Fix: Omit the message from MockWebServer's HTTP/2
Fix: Handle 'Expect: 100 Continue' properly in MockWebServer.