# 0.19.0

## Features

### Happy Eyeballs v2

When the system supports dual-stack networking, `httpx` implements the Happy Eyeballs v2 algorithm (RFC 8305) to resolve hostnames to both IPv6 and IPv4 addresses while privileging IPv6 connectivity. This is implemented by `httpx` both for the `:native` as well as the `:https` (DoH) resolver (which do not perform address sorting, thereby being "DNS-based load-balancing" friendly), and "outsourced" to `getaddrinfo` when using the `:system` resolver.

IPv6 connectivity will also be privileged for `/etc/hosts` local DNS (i.e. `localhost` connections will connec to `::1`).

A new option, `:ip_families`, will also be available (`[Socket::AF_INET6, Socket::AF_INET]` in dual-stack systems). If you'd like to i.e. force IPv4 connectivity, you can do use it (`client = HTTPX.with(ip_families: [Socket::AF_INET])`).

## Improvements

### DNS: :system resolver uses getaddrinfo (instead of the resolver lib)

The `:system` resolver switched to using the `getaddinfo` system function to perform DNS requests. Not only is this call **not** blocking the session event loop anymore (unlike pre-0.19.0 `:system` resolver), it adds a lot of functionality that the stdlib `resolv` library just doesn't support at the moment (such as SRV records).

### HTTP/2 proxy support

The `:proxy` plugin handles "prior-knowledge" HTTP/2 proxies.

```ruby
HTTPX.plugin(:proxy, fallback_protocol: "h2").with_proxy(uri: "http://http2-proxy:3128").get(...
```

Connection coalescing has also been enabled for proxied connections (also `CONNECT`-tunneled connections).

### curl-to-httpx

widget in [project website](https://os85.gitlab.io/httpx/) to turn curl commands into the equivalent `httpx` code.

## Bugfixes

* faraday adapter now supports passing session options.
* proxy: several fixes which enabled env-var (`HTTP(S)_PROXY`) defined proxy support.
* proxy: fixed graceful recovery from proxy tcp connect errors.
* several fixes around CNAMEs timeouts with the native resolver.
* https resolver is now closed when wrapping session closes (it was left open).