0.20: # 2015-03-20-T15:10:00+0000
- Fix a regression in 0.14. When the chunked encoding support was
  introduced we accidentally stopped supporting "Content-Length: 0",
  treat those responses as the zero-body again. This broke e.g. PUT
  requests that would return no payload.

- Add support for 204 No Content responses. According to the HTTP
  standard we must try to consume the body if there's no
  Content-Length, but not if the server returns a 204 response, then
  it MUST NOT include a body (see

  This re-adds support for e.g. 204 No Content response, in practice
  this "worked" before 0.14, but only accidentally and other types of
  responses wouldn't work.

- We now handle our system calls returning EINTR.

0.19: # 2015-01-10-T18:30:00+0000
- Fix a major regression in 0.16. The introduction of "head_as_array"
  completely broke the disconnection logic when the socket_cache was
  enabled (which is the default). When talking to a webserver that
  would disconnect us after N requests request N+1 would always fail
  with a 0 byte response error.

  This issue was reported as RT #101424

- Fix a minor regression in 0.16: The introduction of "head_as_array"
  broke the "proto" part of the return value in a relatively obscure
  edge case where we'd read the header & had no Content-Length and
  couldn't read() anything.

- Fix an edge case in the Trailer support. It would only kick in if we
  got the Transfer-Encoding header before the "Trailer" header, not
  the other way around.

0.18: # 2014-12-10T14:00:00+000
- We now do the right thing on "method => 'HEAD'". I.e. ignore the
  Content-Length parameter, previously we'd just hang trying to slurp
  up the body.
- Fix an edge case with some of the live tests leaving around a HTTP
  server if they died, these don't run by default.

0.17: # 2014-08-31T18:30:00+000
- Minor documentation changes, no functional changes.
- The version number for the last release was incorrect in this
  changelog, fixed in this release.

0.16: # 2014-08-31T00:10:00+000
- Major Change: There are several new Hijk::Error::* constants for
  common issues that happened during normal requests in the face of
  regular exceptions out of the control of this library, such as
  network blips.

  Existing code that checks $res->{error} should be
  forwards-compatible with this change, but anything that was doing
  e.g. regex checks against regular errors thrown by this library
  should be updated to check the new Hijk::Error::* constants instead.

- It's now possible to specify "head_as_array" to get the returned
  headers as an array (with potential duplicated headers), rather than
  the default behavior of lossily returning them as a hash.

- There's now a "read_length" option to control how much we
  POSIX::read($fd, $buf, $read_length) at a time. We don't expect this
  to be useful, it's mainly configurable on general principle so we
  don't have arbitrary unconfigurable hardcoded constants in the

0.15: # 2014-08-30T10:00:00+000
- The new code to support chunked transfer encoding would return a
  nonexisting Hijk::Error::* value of "0" when it encountered a read
  timeout. This meant that not only was the error reporting broken,
  but anything checking if there were errors via the simple idiom of
  "if ($res->{error}) {...}" wouldn't properly report errors.

  We'll now correctly report these errors as

- Since there may still be other bugs like that in this new parsing
  mode it's disabled by default, if you know you want to parse chunked
  responses you have to pass parse_chunked => 1 for now. Usually you
  probably just want to disable chunked encoding on the other end, see
  the note about how to do that with nginx in the docs.

0.14: # 2014-08-29T15:40:36+0900
- Start support chunked transfer encoding.

0.13: # 2014-04-27T20:00:43+0200
- Switch to use non-blocknig fd to avoid a rare deadlock situation
  when select() is successful and the following read() blocks forever
  because there are really nothing to read.

0.12: # 2014-01-31T18:20:00+0100
- Instead of dying on e.g. "Bad arg length for
  Socket::pack_sockaddr_in, length is 0, should be 4" when given a
  host we can't resolve we'll now return a $res with the error value
  set to Hijk::Error::CANNOT_RESOLVEif we can't gethostbyname() the
  provided hostname. Makes it easier to handle DNS resolution

0.11: # 2014-01-06T13:20:00+0100
- Fixed broken HTTP header parsing for servers that didn't return the
  entire header all at the same time, but in chunks.
- We now return "proto" as well as "status" etc. in the response, so
  you can see what the protocol the server was using to speak to
  us. Also we pro-actively connections to servers that claim they're
  speaking HTTP/1.0.
- Document that what the socket_cache is keyed on, for anyone wanting
  to implement a tied hash or whatever.
- Fix a minor bug causing redundant work under "socket_cache => undef"

0.10: # 2013-12-19T16:50:00+0100
- We can now talk HTTP/1.0 an addition to HTTP/1.1, have a way to
  disable the socket cache, and can specify connect and read timeouts
- Fix a really nasty bug with mixings up requests after encountering a
  timeout. See
  http://lists.unbit.it/pipermail/uwsgi/2013-December/006802.html for
- Remove spurious requirenment on perl v5.14.2
- First stab at https://github.com/gugod/Hijk/issues/3 we'll now
  return an error key in the response with
  Hijk::Error::{CONNECT_TIMEOUT,READ_TIMEOUT} instead of dying.
- Nuked the Hijk::HTTP::XS support from the repo, we've decided it was
  too complex for its own good.
- Add support for an on_connect callback for seeing how long the
  connect/reads take.

0.09: # 2013-12-13T07:38:25+0100
- Hijk::request will use XS parser only if Hijk::HTTP::XS is loaded

0.08: # 2013-12-12T20:10:00+0100
- We only checked for undefined return codes from POSIX::read(), not
  0, resulting in an infinite select/read loop when a server with
  keep-alive enabled cut off our connection.

0.07: # 2013-12-09T12:50:00+0100
- Skip the live connect timeout test by default, it will fail making
  live connections on various firewalled/locked down hosts.

0.06: # 2013-12-09T12:20:00+0100
- Declare missing test dependency on Test::Exception
- Declare test dependency on Net::Ping 2.41
- Various POD improvements describing more limitations in the API and
  providing examples.
- Don't unconditionally load the yet-to-be-released Hijk::HTTP::XS
  module, instead provide a "fetch" option.
- Shutdown and delete the cached connection in case of read error.
- Handle syswrite() returning undef without spewing an uninitialized
  comparison error
- Various work on the test suite.

0.05: # 2013-12-04T22:33:31+0100
- Properly invalidate connection cache when seeing 'Connection: close' in the response.

0.04: # 2013-12-04T00:06:16+0100
- Implement 'connect timeout' and 'read timeout'

0.02: # 2013-11-24T16:14:20+0100
- Passthrug extra HTTP header with the 'head' request arg.

0.01: # 2013-11-24T01:49:08+0100
- Initial Release, with all wanted features are implemented.