Revision history for Net-Async-HTTP

0.49    2023-06-06
         * Support proxy by UNIX socket
           (thanks Erik Huelsmann <>)
         * Added a `->DELETE` convenience method (RT139589)
         * `use v5.14` in all perl files
         * Use Test2::V0 for unit testing

0.48    2021-03-08
         * Add PATCH method convenience wrapper
         * Updates to documentation style

         * Make sure to set port number in Host header if using a non-default
           port for the URI scheme (RT134411)

0.47    2020-05-13
         * Updated for Metrics::Any 0.05

0.46    2020-05-12
         * Report client-side HTTP metrics using Metrics::Any, analogous to
           the server ones reported by Net::Async::HTTP::Server

0.45    2019-11-26 17:32:42
         * Allow configuring additional default headers to set in every
           outbound request (RT125642)
         * Added config option to enforce close after every request (RT128952)

         * Correct request encoding for non-canonical headers (RT131040)

0.44    2019-02-17 14:11:57
         * Regnerate embedded SSL testing certs
         * No actual code changes

0.43    2018-11-14 22:05:27
         * Use IPTOS_* constants directly from Socket 2.010
         * Pass SNI hostname when making SSL connections (RT94605)

         * Proxy connections require full authority string (RT119961)

0.42    2018-04-03 15:37:17
         * Optionally support SOCKS5 proxies, using Net::Async::SOCKS
         * Minor docs improvements

         * Ensure that on_header is still invoked for a final redirect that
           isn't followed (RT124920)
         * Better detection of $Socket::VERSION (RT122527)

0.41    2016/06/03 19:00:47
         * Ensure all kept-alive connections are properly closed when removing
           an instance from its containing IO::Async::Loop

0.40    2015/07/27 19:53:19
         * Added 'on_ready' parameter to ->request method, for interacting
           with the socket directly
         * Allow optional restriction of connect family

0.39    2015/07/13 15:34:29
         * Allow additional HTTP request headers to be supplied when in URI
         * Add require_SSL parameter that forbids plaintext requests
         * Announce that a future version may set a default value for
           max_connections_per_host higher than 1

         * Ensure that fail_on_error also applies to legacy-style
           on_response+on_error continuations (RT102022)
         * Avoid use of undef in an error message printing a warning

0.38    2015/06/01 15:32:57
         * More debug_printf() calls for better logging of connection-related

         * Ensure that failed connections are removed from the parent notifier
         * Make sure not to call length() on undefined values (RT102023)
         * Ensure that the first request after connecting is only written
           after the connection has been configured and has a notifier name

0.37    2014/12/13 15:06:06
         * Major refactoring of Net::Async::HTTP::Connection internal closure-
           generation logic

         * Cancel pending connect Futures if pipelining means an existing
           connection can be reused; handles failures better (RT99142)
         * Attempt to handle the case where $f->done itself throws an
           exception by at least maintaining internal state (RT100066)

0.36    2014/10/14 12:03:07
         * Set the content of generated requests if a 'content' param is given
         * Store object-wide SSL params for convenience (RT98514)
         * Clarify the final return value of the on_body_chunk handler
         * Nicer error message when a non-HTTP response header is received

         * 3xx responses without a Location header, and non-(GET|HEAD)
           requests should not be redirected (RT98093)

0.35    2014/03/30 20:58:34
         * Reparse URI scheme after redirect, so host/port/SSLness are reset
           correctly (RT94303)
         * Requeue the next pending request after an HTTP/1.0-style EOF
         * Require at least Compress::Bzip2 2.10 to do bzip2 decompression
        Bugfixes sponsored by Cisco (

0.34    2014/03/27 18:26:43
         * Don't attempt to reconnect ready queue items that already have a
           pending connection attempt (RT92904)
         * Don't close over $responder, thus avoiding a reference cycle leak
           (RT93232 / RT92728)
         * Avoid relying on strong forward references in Future, by creating
           intentional cycles on pending Futures. Workaround for bugfix in
           upcoming Future release.

        Bugfixes sponsored by NET-A-PORTER (

0.33    2014/01/22 23:48:40
         * Include connection flieno in notifier_name in case of multiple
           connections to a given host+port
         * Use different Future failure operation names for timeout and

         * Zlib compression needs Compress::Raw::Zlib 2.057 or newer
         * Ensure that unpipelined requests can be cancelled
         * Ensure that other pending requests on a connection are also
           errored out when connection receives EOF

0.32    2013/11/19 14:09:18
         * Optionally decode encoded content and set the Accept-Encoding
           header of outbound requests. Currently defaults off, but may become
           true in a later version.
         * Handle resolve/connect errors and pipeline queue flushing after
           cancellation correctly

0.31    2013/11/04 18:04:30
         * Allow a plain string URI, upgrading it to a URI object (RT89269)
         * Added ->POST shortcut method, similar to ->GET and ->HEAD
         * Extract HTTP basic auth. information from the URL in an
           HTTP::Request (RT89775)

         * Remember to keep resetting the stall timer when receiving body
         * Fix awkward race between stall_timer and ->cancel
         * Note dependency on Test::Refcount

0.30    2013/10/20 02:08:01
         * Use Future->new->fail to return failing immediate Futures
         * Ensure Future failures all use standard IO::Async style of
           ($message, NAME, ...)

         * Ensure that fail_on_error doesn't cause non-error responses to fail

0.29    2013/09/22 02:50:39
         * Added 'on_body_write' callback
         * Reordering of documentation to emphasise futures first

         * Fix handling of chunk header when split across reads

0.28    2013/09/13 20:40:14
         * Rewrite back into being a subclass of IO::Async::Stream instead of
           using IO::Async::Protocol::Stream
         * IO::Async::Stream 0.59 allows stall timeout detection during writes
           now as well

         * Closed connections should drop the ready queue, so they don't
           accidentally try to process a second request
         * Failure handling of corrupted chunk headers during chunked transfer

0.27    BUGFIXES:
         * Ensure that $f->cancel on a request Future actually works properly

0.26    CHANGES:
         * Added 'stall_timeout', at least for read operations

         * Fix NaHTTP+NaHTTP::Server unit tests for minimum version

0.25    BUGFIXES:
         * Defend against ->setsockopt detecting SvPOK() of string values
         * Test for both "Connection closed" and "Connection closed while
           awaiting header" as OSes differ in behaviour

0.24    CHANGES:
         * Optionally set IP_TOS field in sockets
         * Remember to pass 'SSL' parameter around for requests on 'https'

0.23    BUGFIXES:
         * Fix t/14conn-max.t failures - disable pipelining, wait for correct
           peersock connection to become ready (it may not be [0])

0.22    CHANGES:
         * Allow more control over per-host concurrency; either a pool with a
           limit, or boundless growth of concurrency

0.21    CHANGES:
         * Optional mode in which 4xx and 5xx HTTP errors are turned into
           callback errors or Future failures
         * Handle incoming 1xx informational responses
         * Optionally set 'Expect' header for 100 Continue response

0.20    CHANGES:
         * Improvements to timeout and cancellation handling
         * Updated for Future 0.12; pass 'return' argument to
         * Use newer IO::Async::OS->socketpair in unit tests

0.19    CHANGES:
         * Allow $http->do_request to return a Future object yielding the
           eventual response
         * Added convenient $http->GET and ->HEAD methods
         * Many internal neatenings and rewrites to better support Futures

0.18    CHANGES:
         * Default host/port/SSLness from URL in HTTP::Request if given
         * Set Connection: keep-alive by default
         * Presume that HTTP/1.1 connections can keep-alive by default
         * Attempt to limit the number of outstanding requests in flight per
           connection; keep others in a queue

         * Pass the same timer object down redirects so the same overall
           timeout is reused
         * Fix memory leak by remembering to remove closed NaHTTP::Protocol
           children from containing NaHTTP
         * Correctly terminate requests to connections closed during write
         * Handle trailing whitespace after Chunked encoding chunk size
           (thanks David Leadbeater)

0.17    CHANGES:
         * Support optionally setting local host/port/addr (RT75431)
         * Don't pipeline requests until the server is known to be at least

         * Default request protocol to HTTP/1.1 so caller doesn't have to
         * http(s) port logic on numbers rather than protocol names (RT75615)
         * Use more weaseling in timeout handlers to avoid cyclic reference
           memory leak

0.16    BUGFIXES:
         * Work around HTTP::Message's non-trimming of linear whitespace

0.15    BUGFIXES:
         * Better HTTP handling of "Connection: close" connections; close the
           socket at the end of the response body or HEAD header.

0.14    CHANGES:
         * Per-request timeouts
         * Default port to http/https if not supplied explicitly
         * Fill in Response ->previous on redirects - RT72791
         * Improvements to unit tests

0.13    BUGFIXES:
         * Handle redirect to https:// as well as http:// (RT71526)
         * Fix use of conditional variable declaration that breaks on
           Perl 5.14 (RT71545)
         * Clean up connection cache after resolve, connect or SSL failures

0.12    BUGFIXES:
         * Wait for connect to complete when pipelining multiple requests down
           the same connection initially (RT66189)
         * When serialising a request, handle a full protocol://authority URI
           by splitting protocol/authority parts out of it

0.11    BUGFIXES:
         * Fix stalling t/12request-streaming.t test script that causes lots
           of FAILs at test time

0.10    CHANGES:
         * Support streaming of request body content
         * Support HTTP::Cookies object as a cookie jar
         * Allow proxy_host and proxy_port as ->configure parameters, to set
           defaults for requests

0.09    CHANGES:
         * Use IO::Async::Protocol->connect from 0.34

0.08    CHANGES:
         * Support streaming of response body content
         * Support SSL if IO::Async::SSL is installed

0.07    CHANGES:
         * base on IO::Async::Protocol::Stream

0.06    CHANGES:
         * When POSTing content that isn't form data, expect to be given its
           content type

0.05    CHANGES:
         * Added Test::Pod testing
         * Created example wget-style script
         * Documentation neatening
         * More accurate 'requires' in Build.PL; hopefully to keep CPANTS

0.04    CHANGES:
         * Added 'use warnings'
         * Updated to IO::Async 0.21 style
         * Various small documentation and test script updates

0.03    CHANGES:
         * Support server-local HTTP redirects

0.02    CHANGES:
         * Support HTTP redirects

         * Declare dependency on HTTP::Request and HTTP::Response

0.01    First version, released on an unsuspecting world.