[ANN] httpx 0.20.0 released

httpx 0.20.0 has been released.

HTTPX.get("https://gitlab.com/honeyryderchuck/httpx
<https://gitlab.com/honeyryderchuck/httpx>")

HTTPX is an HTTP client library for the Ruby programming language.

Among its features, it supports:

* HTTP/2 and HTTP/1.x protocol versions
* Concurrent requests by default
* Simple and chainable API
* Proxy Support (HTTP(S), Socks4/4a/5)
* Simple Timeout System
* Lightweight by default (require what you need)

And also:

* Compression (gzip, deflate, brotli)
* Streaming Requests
* Authentication (Basic Auth, Digest Auth, AWS Sigv4)
* Expect 100-continue
* Multipart Requests
* Cookies
* HTTP/2 Server Push
* H2C Upgrade
* Automatic follow redirects
* International Domain Names
* GRPC
* Datadog integration
* Faraday integration
* Webmock integration
* Sentry integration

Here are the updates since the last release:

# 0.20.0

## Features

### Sentry integration

Documentation:

`httpx` ships with integration for `sentry-ruby` to provide HTTP request
specific breadcrumbs and tracing. It can be enabled via:

require "httpx/adapters/sentry"

### Proxy alternative auth schemes

Besides the already previously supported (and still default) HTTP Basic
Auth, the `:proxy` plugin supports HTTP Digest and NTLM auth as well. These
are made available via the following APIs:

http = HTTPX.plugin(:proxy)
http.with_proxy_basic_auth(username: "user", password: "pass", uri: "
http://proxy-uri:8126")
http.with_proxy_digest_auth(username: "user", password: "pass", uri: "
http://proxy-uri:8126")
http.with_proxy_ntlm_auth(username: "user", password: "pass", uri: "
http://proxy-uri:8126")

# or alternatively
http.with_proxy(proxy: "basic", username: "user", password: "pass", uri: "
http://proxy-uri:8126")

## Bugfixes

* HTTPS requests on an URL with an IP as a host, will now correctly not
perform SNI during the TLS handshake, as per RFC;
* `:follow_redirects` plugin will now halt redirections on 3xx responses
with no `"location"` headers; this means it won't crash on 304 responses.
    * If the `httpx` session has the `:proxy` plugin enabled, HTTP 305
responses will retry the request via the proxy exposed in the `"location"`
header, as the RFC mandates.
* `alt-svc` connection switch for HTTPS requests will be halted if the
advertised alternative service "downgrades" to cleartext (example:
`alt-svc` advertises `"h2c"`, but original connection was enabled via TLS).
* A new connection to a TLS-enabled `alt-svc` advertised for a previous
request, will now use that request's hostname as the SNI hostname, when
performing the TLS handshake.
* the `:response_cache` plugin will now correctly handle capitalized HTTP
headers advertised in the `"vary"` header.

# 0.19.8

## Bugfixes

* `datadog` went v1, which broke `httpx` adapter. Now it supports both 1.0
and 0.x versions.

# 0.19.7

## Bugfixes

* fix: in `:proxy` plugin, user/pass credentials were not being used when
passed as options (only when embedded in the URL). This was a regression
introduced in the 0.19.x series.

# 0.19.6

## Bugfixes

* fixed the root cause of the `faraday` adapter failing when used alongside
the `webmock` integration.

# 0.19.5

## Features

### DNS: resolv.conf search/ndots options support (native/https resolvers)

Both the native (default) as well as the HTTPS (DoH) resolvers now support
the "search" and "ndots" options, which adds domain "suffixes" under
certain conditions to be used in name resolutions (this is a quite common
feature found in kubernetes pods).

(While this means a new feature is being shipped in a patch release, one
can argue that this feature "fixes" DNS in `httpx`.)

## Bugfixes

* skipping headers comparison in HTTPX::Options#==; this had the unintended
consequence of breaking connection reuse when crafting requests in a
certain way, thereby making every request to the same origin issue their
own connection, resulting, in multi-request scenarios (and with the
`:persistent` plugin), in the process exhausting the max amount of allowed
file descriptors.