1_4_0.md

doc/release_notes/1_4_0.md
Last Update: 2025-01-03 02:24:04 +0000

1.4.0

Features

:content_digest plugin

The :content_digest can be used to calculate the digest of request payloads and set them in the "content-digest" header; it can also validate the integrity of responses which declare the same "content-digest" header.

More info under honeyryderchuck.gitlab.io/httpx/wiki/Content-Digest

Per-session connection pools

This architectural changes moves away from per-thread shared connection pools, and into per-session (also thread-safe) connection pools. Unlike before, this enables connections from a session to be reused across threads, as well as limiting the number of connections that can be open on a given origin peer. This fixes long-standing issues, such as reusing connections under a fiber scheduler loop (such as the one from the gem async).

A new :pool_options option is introduced, which can be passed an hash with the following sub-options:

  • :max_connections_per_origin: maximum number of connections a pool allows (unbounded by default, for backwards compatibility).

  • :pool_timeout: the number of seconds a session will wait for a connection to be checked out (default: 5)

More info under honeyryderchuck.gitlab.io/httpx/wiki/Connection-Pools

Improvements

  • :aws_sigv4 plugin: improved digest calculation on compressed request bodies by buffering content to a tempfile.

  • HTTPX::Response#json will parse payload from extended json MIME types (like application/ld+json, application/hal+json, …).

Bugfixes

  • :aws_sigv4 plugin: do not try to rewind a request body which yields chunks.

  • fixed request encoding when :json param is passed, and the oj gem is used (by using the :compat flag).

  • native resolver: on message truncation, bubble up tcp handshake errors as resolve errors.

  • allow HTTPX::Response#json to accept extended JSON mime types (such as responses with content-type: application/ld+json)

Chore

  • default options are now fully frozen (in case anyone relies on overriding them).

:xml plugin

XML encoding/decoding (via :xml request param, and HTTPX::Response#xml) is now available via the :xml plugin.

Using HTTPX::Response#xml without the plugin will issue a deprecation warning.