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
IPv6 connectivity will also be privileged for
/etc/hosts local DNS (i.e.
localhost connections will connec to
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])).
: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).
:proxy plugin handles “prior-knowledge” HTTP/2 proxies.
HTTPX.plugin(:proxy, fallback_protocol: "h2").with_proxy(uri: "http://http2-proxy:3128").get(...
Connection coalescing has also been enabled for proxied connections (also
widget in project website to turn curl commands into the equivalent
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).