summaryrefslogtreecommitdiff
path: root/python/hpack/man_page/hpack.1
diff options
context:
space:
mode:
Diffstat (limited to 'python/hpack/man_page/hpack.1')
-rw-r--r--python/hpack/man_page/hpack.1313
1 files changed, 313 insertions, 0 deletions
diff --git a/python/hpack/man_page/hpack.1 b/python/hpack/man_page/hpack.1
new file mode 100644
index 0000000000..f53f6d03f3
--- /dev/null
+++ b/python/hpack/man_page/hpack.1
@@ -0,0 +1,313 @@
+.\" Man page generated from reStructuredText.
+.
+.TH "HPACK" "1" "December 17, 2016" "2.3.0" "hpack"
+.SH NAME
+hpack \- hpack Documentation
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
+.sp
+hpack provides a simple Python interface to the \fI\%HPACK\fP compression algorithm,
+used to compress HTTP headers in HTTP/2. Used by some of the most popular
+HTTP/2 implementations in Python, HPACK offers a great Python interface as well
+as optional upgrade to optimised C\-based compression routines from \fI\%nghttp2\fP\&.
+.sp
+Using hpack is easy:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+from hpack import Encoder, Decoder
+
+e = Encoder()
+encoded_bytes = e.encode(headers)
+
+d = Decoder()
+decoded_headers = d.decode(encoded_bytes)
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+hpack will transparently use nghttp2 on CPython if it\(aqs available, gaining even
+better compression efficiency and speed, but it also makes available a
+pure\-Python implementation that conforms strictly to \fI\%RFC 7541\fP\&.
+.SH CONTENTS
+.SS Installing hpack
+.sp
+hpack is trivial to install from the Python Package Index. Simply run:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+$ pip install hpack
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+Alternatively, feel free to download one of the release tarballs from
+\fI\%our GitHub page\fP, extract it to your favourite directory, and then run
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+$ python setup.py install
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
+hpack has no external dependencies.
+.SS Using nghttp2
+.sp
+If you want to use nghttp2 with hpack, all you need to do is install it along
+with its Python bindings. Consult \fI\%nghttp2\(aqs documentation\fP for instructions
+on how to install it.
+.SS hpack API
+.sp
+This document provides the HPACK API.
+.INDENT 0.0
+.TP
+.B class hpack.Encoder
+An HPACK encoder object. This object takes HTTP headers and emits encoded
+HTTP/2 header blocks.
+.INDENT 7.0
+.TP
+.B encode(headers, huffman=True)
+Takes a set of headers and encodes them into a HPACK\-encoded header
+block.
+.INDENT 7.0
+.TP
+.B Parameters
+.INDENT 7.0
+.IP \(bu 2
+\fBheaders\fP \-\-
+.sp
+The headers to encode. Must be either an iterable of
+tuples, an iterable of \fBHeaderTuple\fP, or a \fBdict\fP\&.
+.sp
+If an iterable of tuples, the tuples may be either
+two\-tuples or three\-tuples. If they are two\-tuples, the
+tuples must be of the format \fB(name, value)\fP\&. If they
+are three\-tuples, they must be of the format
+\fB(name, value, sensitive)\fP, where \fBsensitive\fP is a
+boolean value indicating whether the header should be
+added to header tables anywhere. If not present,
+\fBsensitive\fP defaults to \fBFalse\fP\&.
+.sp
+If an iterable of \fBHeaderTuple\fP, the tuples must always be
+two\-tuples. Instead of using \fBsensitive\fP as a third
+tuple entry, use \fBNeverIndexedHeaderTuple\fP to request that
+the field never be indexed.
+.sp
+\fBWARNING:\fP
+.INDENT 2.0
+.INDENT 3.5
+HTTP/2 requires that all special headers
+(headers whose names begin with \fB:\fP characters)
+appear at the \fIstart\fP of the header block. While
+this method will ensure that happens for \fBdict\fP
+subclasses, callers using any other iterable of
+tuples \fBmust\fP ensure they place their special
+headers at the start of the iterable.
+.sp
+For efficiency reasons users should prefer to use
+iterables of two\-tuples: fixing the ordering of
+dictionary headers is an expensive operation that
+should be avoided if possible.
+.UNINDENT
+.UNINDENT
+
+.IP \(bu 2
+\fBhuffman\fP \-\- (optional) Whether to Huffman\-encode any header sent as
+a literal value. Except for use when debugging, it is
+recommended that this be left enabled.
+.UNINDENT
+.TP
+.B Returns
+A bytestring containing the HPACK\-encoded header block.
+.UNINDENT
+.UNINDENT
+.INDENT 7.0
+.TP
+.B header_table_size
+Controls the size of the HPACK header table.
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B class hpack.Decoder(max_header_list_size=65536)
+An HPACK decoder object.
+.sp
+Changed in version 2.3.0: Added \fBmax_header_list_size\fP argument.
+
+.INDENT 7.0
+.TP
+.B Parameters
+\fBmax_header_list_size\fP (\fBint\fP) \-\-
+.sp
+The maximum decompressed size we will allow
+for any single header block. This is a protection against DoS attacks
+that attempt to force the application to expand a relatively small
+amount of data into a really large header list, allowing enormous
+amounts of memory to be allocated.
+.sp
+If this amount of data is exceeded, a \fIOversizedHeaderListError
+<hpack.OversizedHeaderListError>\fP exception will be raised. At this
+point the connection should be shut down, as the HPACK state will no
+longer be useable.
+.sp
+Defaults to 64kB.
+
+.UNINDENT
+.INDENT 7.0
+.TP
+.B decode(data, raw=False)
+Takes an HPACK\-encoded header block and decodes it into a header set.
+.INDENT 7.0
+.TP
+.B Parameters
+.INDENT 7.0
+.IP \(bu 2
+\fBdata\fP \-\- A bytestring representing a complete HPACK\-encoded header
+block.
+.IP \(bu 2
+\fBraw\fP \-\- (optional) Whether to return the headers as tuples of raw
+byte strings or to decode them as UTF\-8 before returning
+them. The default value is False, which returns tuples of
+Unicode strings
+.UNINDENT
+.TP
+.B Returns
+A list of two\-tuples of \fB(name, value)\fP representing the
+HPACK\-encoded headers, in the order they were decoded.
+.TP
+.B Raises HPACKDecodingError
+If an error is encountered while decoding
+the header block.
+.UNINDENT
+.UNINDENT
+.INDENT 7.0
+.TP
+.B header_table_size
+Controls the size of the HPACK header table.
+.UNINDENT
+.UNINDENT
+.INDENT 0.0
+.TP
+.B class hpack.HeaderTuple
+A data structure that stores a single header field.
+.sp
+HTTP headers can be thought of as tuples of \fB(field name, field value)\fP\&.
+A single header block is a sequence of such tuples.
+.sp
+In HTTP/2, however, certain bits of additional information are required for
+compressing these headers: in particular, whether the header field can be
+safely added to the HPACK compression context.
+.sp
+This class stores a header that can be added to the compression context. In
+all other ways it behaves exactly like a tuple.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B class hpack.NeverIndexedHeaderTuple
+A data structure that stores a single header field that cannot be added to
+a HTTP/2 header compression context.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B class hpack.HPACKError
+The base class for all \fBhpack\fP exceptions.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B class hpack.HPACKDecodingError
+An error has been encountered while performing HPACK decoding.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B class hpack.InvalidTableIndex
+An invalid table index was received.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B class hpack.OversizedHeaderListError
+A header list that was larger than we allow has been received. This may be
+a DoS attack.
+.sp
+New in version 2.3.0.
+
+.UNINDENT
+.SS Vulnerability Notifications
+.sp
+This section of the page contains all known vulnerabilities in the HPACK
+library. These vulnerabilities have all been reported to us via our
+\fI\%vulnerability disclosure policy\fP\&.
+.SS Known Vulnerabilities
+.TS
+center;
+|l|l|l|l|l|l|.
+_
+T{
+#
+T} T{
+Vulnerability
+T} T{
+Date Announced
+T} T{
+First Version
+T} T{
+Last Version
+T} T{
+CVE
+T}
+_
+T{
+1
+T} T{
+\fBHPACK Bomb\fP
+T} T{
+2016\-08\-04
+T} T{
+1.0.0
+T} T{
+2.2.0
+T} T{
+CVE\-2016\-6581
+T}
+_
+.TE
+.SH AUTHOR
+Cory Benfield
+.SH COPYRIGHT
+2015, Cory Benfield
+.\" Generated by docutils manpage writer.
+.