New Features
- HTTP/1.1 and HTTP/2 abstraction layer. Don't specify what version you want to use, just automatically get the best version the server supports!
- Support for upgrading plaintext HTTP/1.1 to plaintext HTTP/2, with thanks to @fredthomsen! (Issue #28)
HTTP11Connection
andHTTPConnection
objects are now both context managers.- Added support for ALPN negotiation when using PyOpenSSL. (Issue #31)
- Added support for user-provided SSLContext objects, with thanks to @jdecuyper! (Issue #8)
- Better support for HTTP/2 error codes, with thanks to @jdecuyper! (Issue #119)
- More gracefully close connections, with thanks to @jdecuyper! (Issue #15)
Structural Changes
- The framing and HPACK layers were stripped out into their own libraries.
Bugfixes
- Properly verify hostnames when using PyOpenSSL.
Bugfixes
- Fix blocking
ImportError
. (Issue #114)
New Features
- HTTP/1.1 support! See the documentation for more. (Issue #75)
- 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
, andgettrailers
methods on the response object have been removed, replaced instead with simple.headers
and.trailers
properties that containHTTPHeaderMap
structures. - Headers and trailers are now bytestrings, rather than unicode strings.
- An
iter_chunked()
method was added to repsonse objects that allows iterating over data in units of individual data frames. - Changed the name of
getresponse()
toget_response()
, becausegetresponse()
was a terrible name forced upon me by httplib.
- The
Bugfixes
- Hyper now correctly handles 'never indexed' header fields. (Issue #110)
New Features
- 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.
Major Changes
- Python 2.7.9 is now fully supported.
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.
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)
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.
For more information on these regressions, please see Issue #37.
Major Changes
- Support for HPACK draft 9.
- Support for HTTP/2 draft 14.
- Support for Sever Push, thanks to @alekstorm. (Issue #40)
- Use a buffered socket to avoid unnecessary syscalls. (Issue #56)
- If nghttp2 is present, use its HPACK encoder for improved speed and compression efficiency. (Issue #60)
- Add
HTTP20Response.gettrailer()
andHTTP20Response.gettrailers()
, supporting downloading and examining HTTP trailers. (Discussed in part in Issue #71.)
Bugfixes
HTTP20Response
objects are context managers. (Issue #24)- Pluggable window managers are now correctly informed about the document size. (Issue #26)
- Header blocks can no longer be corrupted if read in a different order to the one in which they were sent. (Issue #39)
- Default window manager is now smarter about sending WINDOWUPDATE frames. (Issue #41 and Issue #52)
- Fixed inverted window sizes. (Issue #27)
- Correct reply to PING frames. (Issue #48)
- Made the wheel universal, befitting a pure-Python package. (Issue #46)
- HPACK encoder correctly encodes header sets with duplicate headers. (Issue #50)
- 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.
- 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.
- Connection objects are now context managers. (Issue #13)
- The
HTTP20Adapter
correctly reuses connections. - Stop sending WINDOWUPDATE frames with a zero-size window increment.
- Provide basic functionality for gracelessly closing streams.
- Exhausted streams are now disposed of. (Issue #14)
- Implemented logging. (Issue #12)
- Stopped HTTP/2.0 special headers appearing in the response headers. (Issue #16)
- HTTP20Connection objects are now context managers. (Issue #13)
- Response bodies are automatically decompressed. (Issue #20)
- Provide a requests transport adapter. (Issue #19)
- Fix the build status indicator. (Issue #22)
- Initial Release
- Support for HTTP/2.0 draft 09.
- Support for HPACK draft 05.
- Support for HTTP/2.0 flow control.
- Verifies TLS certificates.
- Support for streaming uploads.
- Support for streaming downloads.