Caveat Emptor!

Please be warned: hyper is in a very early alpha. You will encounter bugs
when using it. In addition, there are very many rough edges. With that said,
please try it out in your applications: I need your feedback to fix the bugs
and file down the rough edges.

Versions

hyper supports the final draft of the HTTP/2 specification: additionally,
it provides support for drafts 14, 15, and 16 of the HTTP/2 specification. It
also supports the final draft of the HPACK specification.

Compatibility

hyper is intended to be a drop-in replacement for http.client, with a
similar API. However, hyper intentionally does not name its classes the
same way http.client does. This is because most servers do not support
HTTP/2 at this time: I don’t want you accidentally using hyper when you
wanted http.client.

Documentation

Looking to learn more? Documentation for hyper can be found on Read the Docs.

Contributing

hyper welcomes contributions from anyone! Unlike many other projects we are
happy to accept cosmetic contributions and small contributions, in addition to
large feature requests and changes.

License

hyper is made available under the MIT License. For more details, see the
LICENSE file in the repository.

Authors

hyper is maintained by Cory Benfield, with contributions from others. For
more details about the contributors, please see CONTRIBUTORS.rst.

Release History

v0.7.0 (2016-09-27)

Major Changes

Added a ping method, allowing the user to use the HTTP/2 PING frame
to check connection liveness before, instead of, or between issuing requests.

Bugfixes

Don’t send WINDOWUPDATE frames on closed streams.

Clean up the outstanding stream reads on stream close.

Ensured that connection state is always unconditionally reset on stream
close, regardless of whether the connection has a socket object open or not.

0.6.2 (2016-06-13)

Bugfixes

Fixed packaging error made in prior release.

0.6.1 (2016-06-13)

Bugfixes

Tolerate errors when attempting to send a RST_STREAM frame.

Ensure that calls to fileno() on the compatibility SSLSocket object
actually work correctly. Thanks to @benlast!

Improved some problems with thread-safety in the Stream class. Thanks to
@fredthomsen!

Allowed for systems to use hyper without the bundled cert file being present.
Thanks to @JasonGowthorpe!

0.6.0 (2016-05-06)

Major Changes

The HTTP20Connection object is now thread-safe, so long as stream IDs are
used on all method calls.

Replaced the HTTP/2 state machine logic entirely to use hyper-h2. This will
dramatically change the behaviour of the library in many situations, mostly
for the better. However, this is also likely to introduce new bugs, so please
be cautious.

API Changes

Allow non-dictionary headers in request.

HTTP20Connection now has a force_proto keyword argument to allow the
HTTP20Connection to ignore the NPN/ALPN result.

The --h2 CLI flag now ignores the result of NPN/ALPN negotiation when
hitting HTTPS URLs.

Added support for HTTPS client certificates.

Notifications about streams being reset is now delayed to fire when the
stream in question is next accessed, rather than immediately.

Bugfixes

Overriding HTTP/2 special headers no longer leads to ill-formed header blocks
with special headers at the end.

0.3.1 (2015-04-03)

0.3.0 (2015-04-03)

Implementation of a HTTPHeaderMap data structure that provides dictionary
style lookups while retaining all the semantic information of HTTP headers.

Major Changes

Various changes in the HTTP/2 APIs:

The getheader, getheaders, gettrailer, and gettrailers
methods on the response object have been removed, replaced instead with
simple .headers and .trailers properties that contain
HTTPHeaderMap structures.

Headers and trailers are now bytestrings, rather than unicode strings.

An iter_chunked() method was added to response objects that allows
iterating over data in units of individual data frames.

Changed the name of getresponse() to get_response(), because
getresponse() was a terrible name forced upon me by httplib.

0.2.2 (2015-04-03)

0.2.1 (2015-03-29)

There is now a hyper command-line client that supports making HTTP/2
requests directly from the command-line.

Major Changes

Support for the final drafts of HTTP/2 and HPACK. Updated to offer the ‘h2’
ALPN token.

Minor Changes

We not only remove the Connection header but all headers it refers to.

0.2.0 (2015-02-07)

Major Changes

Python 2.7.9 is now fully supported.

0.1.2 (2015-02-07)

Minor Changes

We now remove the Connection header if it’s given to us, as that header
is not valid in HTTP/2.

Bugfixes

Adds workaround for HTTPie to make our responses look more like urllib3
responses.

0.1.1 (2015-02-06)

Minor Changes

Support for HTTP/2 draft 15, and 16. No drop of support for draft 14.

Updated bundled certificate file.

Bugfixes

Fixed AttributeError being raised when a PING frame was received, thanks
to @t2y. (Issue #79)

Fixed bug where large frames could be incorrectly truncated by the buffered
socket implementation, thanks to @t2y. (Issue #80)

0.1.0 (2014-08-16)

Regressions and Known Bugs

Support for Python 3.3 has been temporarily dropped due to features missing
from the Python 3.3 ssl module. PyOpenSSL has been identified as a
replacement, but until NPN support is merged it cannot be used. Python 3.3
support will be re-added when a suitable release of PyOpenSSL is shipped.

Technically this release also includes support for PyPy and Python 2.7. That
support is also blocked behind a suitable PyOpenSSL release.

0.0.4 (2014-03-08)

Add logic for pluggable objects to manage the flow-control window for both
connections and streams.

Raise new HPACKDecodingError when we’re unable to validly map a
Huffman-encoded string.

Correctly respect the HPACK EOS character.

0.0.3 (2014-02-26)

Use bundled SSL certificates in addition to the OS ones, which have limited
platform availability. (Issue #9)

Connection objects reset to their basic state when they’re closed, enabling
them to be reused. Note that they may not be reused if exceptions are thrown
when they’re in use: you must open a new connection in that situation.