draft-ietf-httpbis-header-compression-05.txt | draft-ietf-httpbis-header-compression-06.txt | |||
---|---|---|---|---|
HTTPbis Working Group R. Peon | HTTPbis Working Group R. Peon | |||
Internet-Draft Google, Inc | Internet-Draft Google, Inc | |||
Intended status: Informational H. Ruellan | Intended status: Standards Track H. Ruellan | |||
Expires: June 7, 2014 Canon CRF | Expires: August 17, 2014 Canon CRF | |||
December 4, 2013 | February 13, 2014 | |||
HPACK - Header Compression for HTTP/2.0 | HPACK - Header Compression for HTTP/2 | |||
draft-ietf-httpbis-header-compression-05 | draft-ietf-httpbis-header-compression-06 | |||
Abstract | Abstract | |||
This document describes HPACK, a format adapted to efficiently | This specification defines HPACK, a compression format for | |||
represent HTTP header fields in the context of HTTP/2.0. | efficiently representing HTTP header fields in the context of HTTP/2. | |||
Editorial Note (To be removed by RFC Editor) | Editorial Note (To be removed by RFC Editor) | |||
Discussion of this draft takes place on the HTTPBIS working group | Discussion of this draft takes place on the HTTPBIS working group | |||
mailing list (ietf-http-wg@w3.org), which is archived at | mailing list (ietf-http-wg@w3.org), which is archived at [1]. | |||
<http://lists.w3.org/Archives/Public/ietf-http-wg/>. | ||||
Working Group information and related documents can be found at | Working Group information and related documents can be found at [2] | |||
<http://tools.ietf.org/wg/httpbis/> (Wiki) and | (Wiki) and [3] (source code and issues tracker). | |||
<https://github.com/http2/http2-spec> (source code and issues | ||||
tracker). | ||||
The changes in this draft are summarized in Appendix A.1. | The changes in this draft are summarized in Appendix A.1. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on June 7, 2014. | This Internet-Draft will expire on August 17, 2014. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2014 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2.1. Outline . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2.1. Outline . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Header Field Encoding . . . . . . . . . . . . . . . . . . . . 5 | 3. Header Field Encoding . . . . . . . . . . . . . . . . . . . . 4 | |||
3.1. Encoding Concepts . . . . . . . . . . . . . . . . . . . . 5 | 3.1. Encoding Concepts . . . . . . . . . . . . . . . . . . . . 4 | |||
3.1.1. Encoding Context . . . . . . . . . . . . . . . . . . . 5 | 3.1.1. Encoding Context . . . . . . . . . . . . . . . . . . 5 | |||
3.1.2. Header Table . . . . . . . . . . . . . . . . . . . . . 6 | 3.1.2. Header Table . . . . . . . . . . . . . . . . . . . . 5 | |||
3.1.3. Reference Set . . . . . . . . . . . . . . . . . . . . 6 | 3.1.3. Reference Set . . . . . . . . . . . . . . . . . . . . 6 | |||
3.1.4. Header Field Representation . . . . . . . . . . . . . 7 | 3.1.4. Header Field Representation . . . . . . . . . . . . . 7 | |||
3.1.5. Header Field Emission . . . . . . . . . . . . . . . . 8 | 3.1.5. Header Field Emission . . . . . . . . . . . . . . . . 8 | |||
3.2. Header Block Decoding . . . . . . . . . . . . . . . . . . 8 | 3.2. Header Block Decoding . . . . . . . . . . . . . . . . . . 8 | |||
3.2.1. Header Field Representation Processing . . . . . . . . 8 | 3.2.1. Header Field Representation Processing . . . . . . . 8 | |||
3.2.2. Reference Set Emission . . . . . . . . . . . . . . . . 10 | 3.2.2. Reference Set Emission . . . . . . . . . . . . . . . 9 | |||
3.2.3. Header Set Completion . . . . . . . . . . . . . . . . 10 | 3.2.3. Header Set Completion . . . . . . . . . . . . . . . . 9 | |||
3.3. Header Table Management . . . . . . . . . . . . . . . . . 10 | 3.3. Header Table Management . . . . . . . . . . . . . . . . . 9 | |||
3.3.1. Maximum Table Size . . . . . . . . . . . . . . . . . . 10 | 3.3.1. Maximum Table Size . . . . . . . . . . . . . . . . . 10 | |||
3.3.2. Entry Eviction When Header Table Size Changes . . . . 10 | 3.3.2. Entry Eviction When Header Table Size Changes . . . . 10 | |||
3.3.3. Entry Eviction when Adding New Entries . . . . . . . . 11 | 3.3.3. Entry Eviction when Adding New Entries . . . . . . . 10 | |||
4. Detailed Format . . . . . . . . . . . . . . . . . . . . . . . 11 | 4. Detailed Format . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
4.1. Low-level representations . . . . . . . . . . . . . . . . 11 | 4.1. Low-level representations . . . . . . . . . . . . . . . . 11 | |||
4.1.1. Integer representation . . . . . . . . . . . . . . . . 11 | 4.1.1. Integer representation . . . . . . . . . . . . . . . 11 | |||
4.1.2. String Literal Representation . . . . . . . . . . . . 13 | 4.1.2. String Literal Representation . . . . . . . . . . . . 13 | |||
4.2. Indexed Header Field Representation . . . . . . . . . . . 15 | 4.2. Indexed Header Field Representation . . . . . . . . . . . 15 | |||
4.3. Literal Header Field Representation . . . . . . . . . . . 15 | 4.3. Literal Header Field Representation . . . . . . . . . . . 15 | |||
4.3.1. Literal Header Field without Indexing . . . . . . . . 15 | 4.3.1. Literal Header Field without Indexing . . . . . . . . 15 | |||
4.3.2. Literal Header Field with Incremental Indexing . . . . 16 | 4.3.2. Literal Header Field with Incremental Indexing . . . 16 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | 4.4. Encoding Context Update . . . . . . . . . . . . . . . . . 17 | |||
6. References . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 18 | |||
6.1. Normative References . . . . . . . . . . . . . . . . . . . 18 | 6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 19 | |||
6.2. Informative References . . . . . . . . . . . . . . . . . . 19 | 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
7.1. Normative References . . . . . . . . . . . . . . . . . . 19 | ||||
7.2. Informative References . . . . . . . . . . . . . . . . . 19 | ||||
Appendix A. Change Log (to be removed by RFC Editor before | Appendix A. Change Log (to be removed by RFC Editor before | |||
publication . . . . . . . . . . . . . . . . . . . . . 19 | publication . . . . . . . . . . . . . . . . . . . . 20 | |||
A.1. Since draft-ietf-httpbis-header-compression-04 . . . . . . 19 | A.1. Since draft-ietf-httpbis-header-compression-05 . . . . . 20 | |||
A.2. Since draft-ietf-httpbis-header-compression-03 . . . . . . 20 | A.2. Since draft-ietf-httpbis-header-compression-04 . . . . . 20 | |||
A.3. Since draft-ietf-httpbis-header-compression-02 . . . . . . 20 | A.3. Since draft-ietf-httpbis-header-compression-03 . . . . . 21 | |||
A.4. Since draft-ietf-httpbis-header-compression-01 . . . . . . 20 | A.4. Since draft-ietf-httpbis-header-compression-02 . . . . . 21 | |||
A.5. Since draft-ietf-httpbis-header-compression-01 . . . . . . 21 | A.5. Since draft-ietf-httpbis-header-compression-01 . . . . . 21 | |||
Appendix B. Static Table . . . . . . . . . . . . . . . . . . . . 21 | A.6. Since draft-ietf-httpbis-header-compression-00 . . . . . 21 | |||
Appendix C. Huffman Codes For Requests . . . . . . . . . . . . . 23 | Appendix B. Static Table . . . . . . . . . . . . . . . . . . . . 22 | |||
Appendix D. Huffman Codes for Responses . . . . . . . . . . . . . 29 | Appendix C. Huffman Codes . . . . . . . . . . . . . . . . . . . 24 | |||
Appendix E. Examples . . . . . . . . . . . . . . . . . . . . . . 34 | Appendix D. Examples . . . . . . . . . . . . . . . . . . . . . . 29 | |||
E.1. Header Field Representation Examples . . . . . . . . . . . 34 | D.1. Header Field Representation Examples . . . . . . . . . . 30 | |||
E.1.1. Literal Header Field with Indexing . . . . . . . . . . 34 | D.1.1. Literal Header Field with Indexing . . . . . . . . . 30 | |||
E.1.2. Literal Header Field without Indexing . . . . . . . . 35 | D.1.2. Literal Header Field without Indexing . . . . . . . . 30 | |||
E.1.3. Indexed Header Field . . . . . . . . . . . . . . . . . 36 | D.1.3. Indexed Header Field . . . . . . . . . . . . . . . . 31 | |||
E.1.4. Indexed Header Field from Static Table . . . . . . . . 37 | D.1.4. Indexed Header Field from Static Table . . . . . . . 32 | |||
E.2. Request Examples without Huffman . . . . . . . . . . . . . 37 | D.2. Request Examples without Huffman . . . . . . . . . . . . 33 | |||
E.2.1. First request . . . . . . . . . . . . . . . . . . . . 37 | D.2.1. First request . . . . . . . . . . . . . . . . . . . . 33 | |||
E.2.2. Second request . . . . . . . . . . . . . . . . . . . . 38 | D.2.2. Second request . . . . . . . . . . . . . . . . . . . 34 | |||
E.2.3. Third request . . . . . . . . . . . . . . . . . . . . 40 | D.2.3. Third request . . . . . . . . . . . . . . . . . . . . 35 | |||
E.3. Request Examples with Huffman . . . . . . . . . . . . . . 42 | D.3. Request Examples with Huffman . . . . . . . . . . . . . . 37 | |||
E.3.1. First request . . . . . . . . . . . . . . . . . . . . 42 | D.3.1. First request . . . . . . . . . . . . . . . . . . . . 37 | |||
E.3.2. Second request . . . . . . . . . . . . . . . . . . . . 43 | D.3.2. Second request . . . . . . . . . . . . . . . . . . . 38 | |||
E.3.3. Third request . . . . . . . . . . . . . . . . . . . . 44 | D.3.3. Third request . . . . . . . . . . . . . . . . . . . . 40 | |||
E.4. Response Examples without Huffman . . . . . . . . . . . . 46 | D.4. Response Examples without Huffman . . . . . . . . . . . . 42 | |||
E.4.1. First response . . . . . . . . . . . . . . . . . . . . 46 | D.4.1. First response . . . . . . . . . . . . . . . . . . . 42 | |||
E.4.2. Second response . . . . . . . . . . . . . . . . . . . 48 | D.4.2. Second response . . . . . . . . . . . . . . . . . . . 44 | |||
E.4.3. Third response . . . . . . . . . . . . . . . . . . . . 49 | D.4.3. Third response . . . . . . . . . . . . . . . . . . . 45 | |||
E.5. Response Examples with Huffman . . . . . . . . . . . . . . 51 | D.5. Response Examples with Huffman . . . . . . . . . . . . . 47 | |||
E.5.1. First response . . . . . . . . . . . . . . . . . . . . 51 | D.5.1. First response . . . . . . . . . . . . . . . . . . . 47 | |||
E.5.2. Second response . . . . . . . . . . . . . . . . . . . 53 | D.5.2. Second response . . . . . . . . . . . . . . . . . . . 50 | |||
E.5.3. Third response . . . . . . . . . . . . . . . . . . . . 54 | D.5.3. Third response . . . . . . . . . . . . . . . . . . . 51 | |||
1. Introduction | 1. Introduction | |||
This document describes HPACK, a format adapted to efficiently | This specification defines HPACK, a compression format for | |||
represent HTTP header fields in the context of HTTP/2.0 (see | efficiently representing HTTP header fields in the context of HTTP/2 | |||
[HTTP2]). | (see [HTTP2]). | |||
2. Overview | 2. Overview | |||
In HTTP (see [HTTP-p1]), header fields are sent without any form of | In HTTP/1.1 (see [HTTP-p1]), header fields are encoded without any | |||
compression. As web pages have grown to include dozens to hundreds | form of compression. As web pages have grown to include dozens to | |||
of requests, the redundant header fields in these requests now pose a | hundreds of requests, the redundant header fields in these requests | |||
problem of measurable latency and unnecessary bandwidth (see [PERF1] | now measurably increase latency and unnecessarily consume bandwidth | |||
and [PERF2]). | (see [PERF1] and [PERF2]). | |||
SPDY [SPDY] initially addressed this redundancy by compressing header | SPDY [SPDY] initially addressed this redundancy by compressing header | |||
fields with Deflate, which proved very effective at eliminating the | fields using the DEFLATE format [DEFLATE], which proved very | |||
redundant header fields. However, that approach exposed a security | effective at efficiently representing the redundant header fields. | |||
risk as demonstrated by the CRIME [CRIME]. | However, that approach exposed a security risk as demonstrated by the | |||
CRIME attack (see [CRIME]). | ||||
This document describes HPACK, a new compressor for header fields | This document describes HPACK, a new compressor for header fields | |||
which eliminates redundant header fields, is not vulnerable to known | which eliminates redundant header fields, is not vulnerable to known | |||
security attacks, and which also has a bounded memory cost for use in | security attacks, and which also has a bounded memory requirement for | |||
constrained environments. | use in constrained environments. | |||
2.1. Outline | 2.1. Outline | |||
The HTTP header field encoding described in this document is based on | The HTTP header field encoding defined in this document is based on a | |||
a header table that map name-value pairs to index values. Header | header table that maps name-value pairs to index values. The header | |||
tables are incrementally updated during the HTTP/2.0 session. | table is incrementally updated during the HTTP/2 connection. | |||
The encoder is responsible for deciding which header fields to insert | A set of header fields is treated as an unordered collection of name- | |||
as new entries in the header table. The decoder then does exactly | value pairs. Names and values are considered to be opaque sequences | |||
what the encoder prescribes, ending in a state that exactly matches | of octets. The order of header fields is not guaranteed to be | |||
the encoder's state. This enables decoders to remain simple and | preserved after being compressed and decompressed. | |||
understand a wide variety of encoders. | ||||
As two consecutive sets of header fields often have header fields in | As two consecutive sets of header fields often have header fields in | |||
common, each set of header fields is coded as a difference from the | common, each set is coded as a difference from the previous set. The | |||
previous set of header fields. The goal is to only encode the | goal is to only encode the changes (header fields present in one of | |||
changes (header fields present in one of the set and not in the | the sets that are absent from the other) between the two sets of | |||
other) between the two sets of header fields. | header fields. | |||
HTTP header field compression treats a set of header fields as an | A header field is represented either literally or as a reference to a | |||
unordered collection of name-value pairs. Names and values are | name-value pair in the header table. A set of header fields is | |||
opaque sequences of octets. The order of header fields is not | stored as a set of references to entries in the header table | |||
guaranteed to be preserved after being compression and decompression. | (possibly keeping only a subset of it, as some header fields may be | |||
missing a corresponding entry in the header table). Differences | ||||
between consecutive sets of header fields are encoded as changes to | ||||
the set of references. | ||||
The encoder is responsible for deciding which header fields to insert | ||||
as new entries in the header table. The decoder executes the | ||||
modifications to the header table and reference set prescribed by the | ||||
encoder, reconstructing the set of header fields in the process. | ||||
This enables decoders to remain simple and understand a wide variety | ||||
of encoders. | ||||
Examples illustrating the use of these different mechanisms to | Examples illustrating the use of these different mechanisms to | |||
represent header fields are available in Appendix E. | represent header fields are available in Appendix D. | |||
3. Header Field Encoding | 3. Header Field Encoding | |||
3.1. Encoding Concepts | 3.1. Encoding Concepts | |||
The encoding and decoding of header fields relies on some components | The encoding and decoding of header fields relies on some components | |||
and concepts: | and concepts: | |||
Header Field: A name-value pair. Both name and value are sequences | Header Field: A name-value pair. Both the name and value are | |||
of octets. | treated as opaque sequences of octets. | |||
Header Table: The header table (see Section 3.1.2) is a component | Header Table: The header table (see Section 3.1.2) is a component | |||
used to associate stored header fields to index values. The data | used to associate stored header fields to index values. | |||
stored in this table is in first-in, first-out order. | ||||
Static Table: The static table (see Appendix B) is a component used | Static Table: The static table (see Appendix B) is a component used | |||
to associate static header fields to index values. This data is | to associate static header fields to index values. This data is | |||
ordered, read-only, always accessible, and may be shared amongst | ordered, read-only, always accessible, and may be shared amongst | |||
all encoding contexts. | all encoding contexts. | |||
Reference Set: The reference set (see Section 3.1.3) is a component | Reference Set: The reference set (see Section 3.1.3) is a component | |||
containing an unordered set of references to entries in the header | containing an unordered set of references to entries in the header | |||
table. This is used for the differential encoding of a new header | table. This is used for the differential encoding of a new header | |||
set. | set. | |||
Header Set: A header set is a potentially ordered group of header | Header Set: A header set is an unordered group of header fields that | |||
fields that are encoded jointly. A complete set of key-value | are encoded jointly. A complete set of key-value pairs contained | |||
pairs contained in a HTTP request or response is a header set. | in a HTTP request or response is a header set. | |||
Header Field Representation: A header field can be represented in | Header Field Representation: A header field can be represented in | |||
encoded form either as a literal or as an index (see | encoded form either as a literal or as an index (see | |||
Section 3.1.4). | Section 3.1.4). | |||
Header Block: The entire set of encoded header field representations | Header Block: The entire set of encoded header field representations | |||
which, when decoded, yield a complete header set. | which, when decoded, yield a complete header set. | |||
Header Field Emission: When decoding a set of header field | Header Field Emission: When decoding a set of header field | |||
representations, some operations emit a header field (see | representations, some operations emit a header field (see | |||
Section 3.1.5). Emitted header fields can be safely passed to the | Section 3.1.5). Emitted header fields are added to the current | |||
upper processing layers as part of the current Header Set. | header set and cannot be removed. | |||
3.1.1. Encoding Context | 3.1.1. Encoding Context | |||
The set of mutable structures used within an encoding context include | The set of mutable structures used within an encoding context include | |||
a header table and a reference set. Everything else is either | a header table and a reference set. Everything else is either | |||
immutable or conceptual. | immutable or conceptual. | |||
Using HTTP, messages are exchanged between a client and a server in | HTTP messages are exchanged between a client and a server in both | |||
both direction. To keep the encoding of header fields in each | directions. The encoding of header fields in each direction is | |||
direction independent from the other direction, there is one encoding | independent from the other direction. There is a single encoding | |||
context for each direction. | context for each direction used to encode all header fields sent in | |||
that direction. | ||||
The header fields contained in a PUSH_PROMISE frame sent by a server | ||||
to a client are encoded within the same context as the header fields | ||||
contained in the HEADERS frame corresponding to a response sent from | ||||
the server to the client. | ||||
3.1.2. Header Table | 3.1.2. Header Table | |||
A header table consists of a list of header fields maintained in | A header table consists of a list of header fields maintained in | |||
first-in, first-out order. The first and newest entry in a header | first-in, first-out order. The first and newest entry in a header | |||
table is always at index 1, and the oldest entry of a header table is | table is always at index 1, and the oldest entry of a header table is | |||
at the index len(header table). | at the index len(header table). | |||
The header table is initially empty. | The header table is initially empty. | |||
There is typically no need for the header table to contain duplicate | There is typically no need for the header table to contain duplicate | |||
entries. However, duplicate entries MUST NOT be treated as an error | entries. However, duplicate entries MUST NOT be treated as an error | |||
by a decoder. | by a decoder. | |||
The encoder decides how to update the header table and as such can | The encoder decides how to update the header table and as such can | |||
control how much memory is used by the header table. To limit the | control how much memory is used by the header table. To limit the | |||
memory requirements on the decoder side, the header table size is | memory requirements of the decoder, the header table size is strictly | |||
strictly bounded (see Section 3.3.1). | bounded (see Section 3.3.1). | |||
The header table is updated during the processing of a set of header | The header table is updated during the processing of a set of header | |||
field representations (see header field representation processing | field representations (see Section 3.2.1). | |||
(Section 3.2.1)). | ||||
3.1.3. Reference Set | 3.1.3. Reference Set | |||
A reference set is an unordered set of references to entries of the | A reference set is an unordered set of references to entries of the | |||
header table. | header table. | |||
The reference set is initially empty. | The reference set is initially empty. | |||
The reference set is updated during the processing of a set of header | The reference set is updated during the processing of a set of header | |||
field representations (see header field representation processing | field representations (see Section 3.2.1). | |||
(Section 3.2.1)). | ||||
The reference set enables differential encoding, whereby only | The reference set enables differential encoding, whereby only | |||
differences between the previous header set and the current header | differences between the previous header set and the current header | |||
set need to be encoded. The use of differential encoding is optional | set need to be encoded. The use of differential encoding is optional | |||
for any header set. | for any header set. | |||
When an entry is evicted from the header table, if it was referenced | When an entry is evicted from the header table, if it was referenced | |||
from the reference set, its reference is removed from the reference | from the reference set, its reference is removed from the reference | |||
set. | set. | |||
To limit the memory requirements on the decoder side for handling the | To limit the memory requirements on the decoder side for handling the | |||
reference set, only entries within the header table can be contained | reference set, only entries within the header table can be contained | |||
in the reference set. To still allow entries from the static table | in the reference set. To still allow entries from the static table | |||
to take advantage of the differential encoding, when a header field | to take advantage of the differential encoding, when a header field | |||
is represented as a reference to an entry of the static table, this | is represented as a reference to an entry of the static table, this | |||
entry is inserted into the header table ((see Section 3.2.1). | entry is inserted into the header table (see Section 3.2.1). | |||
3.1.4. Header Field Representation | 3.1.4. Header Field Representation | |||
An encoded header field can be represented either as a literal or as | An encoded header field can be represented either as a literal or as | |||
an index. | an index. | |||
Literal Representation: A literal representation defines a new | Literal Representation: A literal representation defines a new | |||
header field. The header field name is represented either | header field. The header field name is represented either | |||
literally or as a reference to an entry of the header table. The | literally or as a reference to an entry of the header table. The | |||
header field value is represented literally. | header field value is represented literally. | |||
skipping to change at page 7, line 36 | skipping to change at page 7, line 25 | |||
Two different literal representations are provided: | Two different literal representations are provided: | |||
* A literal representation that does not add the header field to | * A literal representation that does not add the header field to | |||
the header table (see Section 4.3.1). | the header table (see Section 4.3.1). | |||
* A literal representation that adds the header field as a new | * A literal representation that adds the header field as a new | |||
entry at the beginning of the header table (see Section 4.3.2). | entry at the beginning of the header table (see Section 4.3.2). | |||
Indexed Representation: The indexed representation defines a header | Indexed Representation: The indexed representation defines a header | |||
field as a reference to an entry in either the header table or the | field as a reference to an entry in either the header table or the | |||
static table(see Section 4.2). | static table (see Section 4.2). | |||
<---------- Index Address Space ----------> | <---------- Index Address Space ----------> | |||
<-- Header Table --> <-- Static Table --> | <-- Header Table --> <-- Static Table --> | |||
+---+-----------+---+ +---+-----------+---+ | +---+-----------+---+ +---+-----------+---+ | |||
| 1 | ... | k | |k+1| ... | n | | | 1 | ... | k | |k+1| ... | n | | |||
+---+-----------+---+ +---+-----------+---+ | +---+-----------+---+ +---+-----------+---+ | |||
^ | | ^ | | |||
| V | | V | |||
Insertion Point Drop Point | Insertion Point Drop Point | |||
Index Address Space | Index Address Space | |||
Indices between 1 and len(header table), inclusive, refer to | Indices between 1 and len(header table), inclusive, refer to | |||
elements in the header table, with index 1 referring to the | elements in the header table, with index 1 referring to the | |||
beginning of the table. | beginning of the table. | |||
Indices between len(header table)+1 and len(header table)+ | Indices between len(header table)+1 and len(header | |||
len(static table), inclusive, refer to elements in the static | table)+len(static table), inclusive, refer to elements in the | |||
table, where the index len(header table)+1 refers to the first | static table, where the index len(header table)+1 refers to the | |||
entry in the static table. | first entry in the static table. | |||
Index 0 signals that the reference set MUST be emptied. | Index 0 signals a modification of the encoding context: either | |||
the reference set is emptied, or the maximum size of the header | ||||
table is updated (see Section 4.4). | ||||
Any other indices MUST be treated as erroneous, and the | Any other indices MUST be treated as erroneous, and the | |||
compression context considered corrupt and unusable. | compression context considered corrupt and unusable. | |||
3.1.5. Header Field Emission | 3.1.5. Header Field Emission | |||
The emission of a header field is the process of marking a header | The emission of a header field is the process of marking a header | |||
field as belonging to the current header set. Once a header has been | field as belonging to the current header set. Once a header has been | |||
emitted, it cannot be removed from the current header set. | emitted, it cannot be removed from the current header set. | |||
skipping to change at page 8, line 50 | skipping to change at page 8, line 36 | |||
The processing of a header block to obtain a header set is defined in | The processing of a header block to obtain a header set is defined in | |||
this section. To ensure that the decoding will successfully produce | this section. To ensure that the decoding will successfully produce | |||
a header set, a decoder MUST obey the following rules. | a header set, a decoder MUST obey the following rules. | |||
3.2.1. Header Field Representation Processing | 3.2.1. Header Field Representation Processing | |||
All the header field representations contained in a header block are | All the header field representations contained in a header block are | |||
processed in the order in which they are presented, as specified | processed in the order in which they are presented, as specified | |||
below. | below. | |||
An _indexed representation_ with an index value of 0 entails the | An _indexed representation_ with an index value of 0 entails one of | |||
following actions: | the following actions, depending on what is encoded next: | |||
o The reference set is emptied. | o The reference set is emptied. | |||
o The maximum size of the header table is updated. | ||||
An _indexed representation_ corresponding to an entry _present_ in | An _indexed representation_ corresponding to an entry _present_ in | |||
the reference set entails the following actions: | the reference set entails the following actions: | |||
o The entry is removed from the reference set. | o The entry is removed from the reference set. | |||
An _indexed representation_ corresponding to an entry _not present_ | An _indexed representation_ corresponding to an entry _not present_ | |||
in the reference set entails the following actions: | in the reference set entails the following actions: | |||
o If referencing an element of the static table: | o If referencing an element of the static table: | |||
skipping to change at page 10, line 18 | skipping to change at page 10, line 4 | |||
processed, the header fields referenced in the reference set which | processed, the header fields referenced in the reference set which | |||
have not previously been emitted during this processing are emitted. | have not previously been emitted during this processing are emitted. | |||
3.2.3. Header Set Completion | 3.2.3. Header Set Completion | |||
Once all of the header field representations have been processed, and | Once all of the header field representations have been processed, and | |||
the remaining items in the reference set have been emitted, the | the remaining items in the reference set have been emitted, the | |||
header set is complete. | header set is complete. | |||
3.3. Header Table Management | 3.3. Header Table Management | |||
3.3.1. Maximum Table Size | 3.3.1. Maximum Table Size | |||
To limit the memory requirements on the decoder side, the size of the | To limit the memory requirements on the decoder side, the size of the | |||
header table is bounded. The size of the header table MUST stay | header table is bounded. The size of the header table MUST stay | |||
lower than or equal to the value of the HTTP/2.0 setting | lower than or equal to its maximum size. | |||
SETTINGS_HEADER_TABLE_SIZE (see [HTTP2]). | ||||
By default, the maximum size of the header table is equal to the | ||||
value of the HTTP/2 setting SETTINGS_HEADER_TABLE_SIZE defined by the | ||||
decoder (see [HTTP2]). The encoder can change this maximum size (see | ||||
Section 4.4), but it must stay lower than or equal to the value of | ||||
SETTINGS_HEADER_TABLE_SIZE. | ||||
The size of the header table is the sum of the size of its entries. | The size of the header table is the sum of the size of its entries. | |||
The size of an entry is the sum of its name's length in octets (as | The size of an entry is the sum of its name's length in octets (as | |||
defined in Section 4.1.2), of its value's length in octets | defined in Section 4.1.2), of its value's length in octets | |||
(Section 4.1.2) and of 32 octets. | (Section 4.1.2) and of 32 octets. | |||
The lengths are measured on the non-encoded entry name and entry | The lengths are measured on the non-encoded entry name and entry | |||
value (for the case when a Huffman encoding is used to transmit | value (for the case when a Huffman encoding is used to transmit | |||
string values). | string values). | |||
skipping to change at page 10, line 47 | skipping to change at page 10, line 37 | |||
For example, an entry structure using two 64-bits pointers to | For example, an entry structure using two 64-bits pointers to | |||
reference the name and the value and the entry, and two 64-bits | reference the name and the value and the entry, and two 64-bits | |||
integer for counting the number of references to these name and value | integer for counting the number of references to these name and value | |||
would use 32 octets. | would use 32 octets. | |||
3.3.2. Entry Eviction When Header Table Size Changes | 3.3.2. Entry Eviction When Header Table Size Changes | |||
Whenever an entry is evicted from the header table, any reference to | Whenever an entry is evicted from the header table, any reference to | |||
that entry contained by the reference set is removed. | that entry contained by the reference set is removed. | |||
Whenever SETTINGS_HEADER_TABLE_SIZE is made smaller, entries are | Whenever the maximum size for the header table is made smaller, | |||
evicted from the end of the header table until the size of the header | entries are evicted from the end of the header table until the size | |||
table is less than or equal to SETTINGS_HEADER_TABLE_SIZE. | of the header table is less than or equal to the maximum size. | |||
The eviction of an entry from the header table causes the index of | The eviction of an entry from the header table causes the index of | |||
the entries in the static table to be reduced by one. | the entries in the static table to be reduced by one. | |||
3.3.3. Entry Eviction when Adding New Entries | 3.3.3. Entry Eviction when Adding New Entries | |||
Whenever a new entry is to be added to the table, any name referenced | Whenever a new entry is to be added to the table, any name referenced | |||
by the representation of this new entry is cached, and then entries | by the representation of this new entry is cached, and then entries | |||
are evicted from the end of the header table until the size of the | are evicted from the end of the header table until the size of the | |||
header table is less than or equal to SETTINGS_HEADER_TABLE_SIZE - | header table is less than or equal to (maximum size - new entry | |||
new entry size, or until the table is empty. | size), or until the table is empty. | |||
If the size of the new entry is less than or equal to | If the size of the new entry is less than or equal to the maximum | |||
SETTINGS_HEADER_TABLE_SIZE, that entry is added to the table. It is | size, that entry is added to the table. It is not an error to | |||
not an error to attempt to add an entry that is larger than | attempt to add an entry that is larger than the maximum size. | |||
SETTINGS_HEADER_TABLE_SIZE. | ||||
4. Detailed Format | 4. Detailed Format | |||
4.1. Low-level representations | 4.1. Low-level representations | |||
4.1.1. Integer representation | 4.1.1. Integer representation | |||
Integers are used to represent name indexes, pair indexes or string | Integers are used to represent name indexes, pair indexes or string | |||
lengths. To allow for optimized processing, an integer | lengths. To allow for optimized processing, an integer | |||
representation always finishes at the end of an octet. | representation always finishes at the end of an octet. | |||
An integer is represented in two parts: a prefix that fills the | An integer is represented in two parts: a prefix that fills the | |||
current octet and an optional list of octets that are used if the | current octet and an optional list of octets that are used if the | |||
integer value does not fit within the prefix. The number of bits of | integer value does not fit within the prefix. The number of bits of | |||
the prefix (called N) is a parameter of the integer representation. | the prefix (called N) is a parameter of the integer representation. | |||
The N-bit prefix allows filling the current octet. If the value is | The N-bit prefix allows filling the current octet. If the value is | |||
small enough (strictly less than 2^N-1), it is encoded within the | small enough (strictly less than 2^N-1), it is encoded within the | |||
N-bit prefix. Otherwise all the bits of the prefix are set to 1 and | N-bit prefix. Otherwise all the bits of the prefix are set to 1 and | |||
the value is encoded using an unsigned variable length integer [1] | the value is encoded using an unsigned variable length integer [4] | |||
representation. N is always between 1 and 8 bits. An integer | representation. N is always between 1 and 8 bits. An integer | |||
starting at an octet-boundary will have an 8-bit prefix. | starting at an octet-boundary will have an 8-bit prefix. | |||
The algorithm to represent an integer I is as follows: | The algorithm to represent an integer I is as follows: | |||
If I < 2^N - 1, encode I on N bits | if I < 2^N - 1, encode I on N bits | |||
Else | else | |||
encode 2^N - 1 on N bits | encode (2^N - 1) on N bits | |||
I = I - (2^N - 1) | I = I - (2^N - 1) | |||
While I >= 128 | while I >= 128 | |||
Encode (I % 128 + 128) on 8 bits | encode (I % 128 + 128) on 8 bits | |||
I = I / 128 | I = I / 128 | |||
encode (I) on 8 bits | encode I on 8 bits | |||
For informational purpose, the algorithm to decode an integer I is as | ||||
follows: | ||||
decode I from the next N bits | ||||
if I < 2^N - 1, return I | ||||
else | ||||
M = 0 | ||||
repeat | ||||
B = next octet | ||||
I = I + (B & 127) * 2^M | ||||
M = M + 7 | ||||
while B & 128 == 128 | ||||
return I | ||||
This integer representation allows for values of indefinite size. It | This integer representation allows for values of indefinite size. It | |||
is also possible for an encoder to send a large number of zero | is also possible for an encoder to send a large number of zero | |||
values, which can waste octets and could be used to overflow integer | values, which can waste octets and could be used to overflow integer | |||
values. Excessively large integer encodings - in value or octet | values. Excessively large integer encodings - in value or octet | |||
length - MUST be treated as a decoding error. Different limits can | length - MUST be treated as a decoding error. Different limits can | |||
be set for each of the different uses of integers, based on | be set for each of the different uses of integers, based on | |||
implementation constraints. | implementation constraints. | |||
4.1.1.1. Example 1: Encoding 10 using a 5-bit prefix | 4.1.1.1. Example 1: Encoding 10 using a 5-bit prefix | |||
skipping to change at page 13, line 13 | skipping to change at page 13, line 19 | |||
terminates. | terminates. | |||
I, now 10, is encoded on 8 bits as: 00001010 | I, now 10, is encoded on 8 bits as: 00001010 | |||
The process ends. | The process ends. | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| X | X | X | 1 | 1 | 1 | 1 | 1 | Prefix = 31, I = 1306 | | X | X | X | 1 | 1 | 1 | 1 | 1 | Prefix = 31, I = 1306 | |||
| 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1306>=128, encode(154), I=1306/128 | | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1306>=128, encode(154), I=1306/128 | |||
| 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 10<128, encode(10), done | | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 10<128, encode(10), done | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
4.1.1.3. Example 3: Encoding 42 starting at an | 4.1.1.3. Example 3: Encoding 42 starting at an octet-boundary | |||
octet-boundary | ||||
The value 42 is to be encoded starting at an octet-boundary. This | The value 42 is to be encoded starting at an octet-boundary. This | |||
implies that a 8-bit prefix is used. | implies that a 8-bit prefix is used. | |||
o 42 is less than 255 (= 2^8 - 1) and is represented using the 8-bit | o 42 is less than 255 (= 2^8 - 1) and is represented using the 8-bit | |||
prefix. | prefix. | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 42 stored on 8 bits | | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 42 stored on 8 bits | |||
skipping to change at page 13, line 40 | skipping to change at page 13, line 45 | |||
4.1.2. String Literal Representation | 4.1.2. String Literal Representation | |||
Header field names and header field values are encoded as sequences | Header field names and header field values are encoded as sequences | |||
of octets. A header field name or a header field value is encoded in | of octets. A header field name or a header field value is encoded in | |||
three parts: | three parts: | |||
1. One bit, H, indicating whether or not the octets are Huffman | 1. One bit, H, indicating whether or not the octets are Huffman | |||
encoded. | encoded. | |||
2. The number of octets required to hold the result of the next | 2. The number of octets required to hold the result of the next | |||
step, represented as a variable-length-quantity (Section 4.1.1), | step, represented as an integer with a 7-bit prefix (see | |||
starting with a 7-bit prefix immediately following the first bit. | Section 4.1.1), immediately following the first bit. | |||
3. The encoded data of the string: | 3. The encoded data of the string: | |||
1. If H is true, then the encoded string data is the bitwise | * If H is '1', then the encoded string data is the bitwise | |||
concatenation of the canonical [CANON]Huffman code [HUFF] | concatenation of the canonical [CANON] Huffman code [HUFF] | |||
corresponding to each octet of the data, followed by between | corresponding to each octet of the data, followed by between | |||
0-7 bits of padding. | 0-7 bits of padding. | |||
2. If H is false, then the encoded string is the octets of the | * If H is '0', then the encoded string is the octets of the | |||
field value without modification. | field value without modification. | |||
Padding is necessary when doing Huffman encoding to ensure that the | Padding is necessary when doing Huffman encoding to ensure that the | |||
remaining bits between the actual end of the data and the next octet | remaining bits between the actual end of the data and the next octet | |||
boundary are not misinterpreted as part of the input data. | boundary are not misinterpreted as part of the input data. | |||
When padding for Huffman encoding, use the bits from the EOS (end-of- | When padding for Huffman encoding, the bits from the EOS (end-of- | |||
string) entry in the Huffman table, starting with the MSB (most | string) entry in the Huffman table are used, starting with the MSB | |||
significant bit). This entry is guaranteed to be at least 8 bits | (most significant bit). This entry is guaranteed to be at least 8 | |||
long. | bits long. | |||
String literals sent in the client to server direction which use | ||||
Huffman encoding are encoded with the codes within the request | ||||
Huffman code table (Appendix C) (see Request Examples With Huffman | ||||
(Appendix E.3)). | ||||
String literals sent in the server to client direction which use | String literals which use Huffman encoding are encoded with the | |||
Huffman encoding are encoded with the codes within the response | Huffman Codes Appendix C (see examples in Request Examples with | |||
Huffman code table (Appendix D) (see Response Examples With Huffman | Huffman Appendix D.3 and in Response Examples with Huffman | |||
(Appendix E.5)). | Appendix D.5). | |||
The EOS symbol is represented with value 256, and is used solely to | The EOS symbol is represented with value 256, and is used solely to | |||
signal the end of the Huffman-encoded key data or the end of the | signal the end of the Huffman-encoded key data or the end of the | |||
Huffman-encoded value data. Given that only between 0-7 bits of the | Huffman-encoded value data. Given that only between 0-7 bits of the | |||
EOS symbol is included in any Huffman-encoded string, and given that | EOS symbol is included in any Huffman-encoded string, and given that | |||
the EOS symbol is at least 8 bits long, it is expected that it should | the EOS symbol is at least 8 bits long, it is expected that it should | |||
never be successfully decoded. | never be successfully decoded. | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| 1 | Value Length Prefix (7) | | | 1 | Value Length Prefix (7) | | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| Value Length (0-N octets) | | | Value Length (0-N octets) | | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
... | ... | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| Huffman Encoded Data |Padding| | | Huffman Encoded Data |Padding| | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
String Literal With Huffman Encoding | String Literal with Huffman Encoding | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| 0 | Value Length Prefix (7) | | | 0 | Value Length Prefix (7) | | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| Value Length (0-N octets) | | | Value Length (0-N octets) | | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
... | ... | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| Field Bytes Without Encoding | | | Field Bytes without Encoding | | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
String Literal Without Huffman Encoding | String Literal without Huffman Encoding | |||
4.2. Indexed Header Field Representation | 4.2. Indexed Header Field Representation | |||
An indexed header field representation either identifies an entry in | An indexed header field representation either identifies an entry in | |||
the header table or static table. The processing of an indexed | the header table or static table. The processing of an indexed | |||
header field representation is described in Section 3.2.1. | header field representation is described in Section 3.2.1. | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| 1 | Index (7+) | | | 1 | Index (7+) | | |||
+---+---------------------------+ | +---+---------------------------+ | |||
Indexed Header Field | Indexed Header Field | |||
This representation starts with the '1' 1-bit pattern, followed by | This representation starts with the '1' 1-bit pattern, followed by | |||
the index of the matching pair, represented as an integer with a | the index of the matching pair, represented as an integer with a | |||
7-bit prefix. | 7-bit prefix. | |||
The index value of 0 is reserved for signalling that the reference | The index value of 0 is reserved for signalling changes in the | |||
set is emptied. | encoding context (see Section 4.4). | |||
4.3. Literal Header Field Representation | 4.3. Literal Header Field Representation | |||
Literal header field representations contain a literal header field | Literal header field representations contain a literal header field | |||
value. Header field names are either provided as a literal or by | value. Header field names are either provided as a literal or by | |||
reference to an existing header table or static table entry. | reference to an existing header table or static table entry. | |||
Literal representations all result in the emission of a header field | Literal representations all result in the emission of a header field | |||
when decoded. | when decoded. | |||
4.3.1. Literal Header Field without Indexing | 4.3.1. Literal Header Field without Indexing | |||
A literal header field without indexing causes the emission of a | A literal header field without indexing causes the emission of a | |||
header field without altering the header table. | header field without altering the header table. | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| 0 | 1 | Index (6+) | | | 0 | 1 | Index (6+) | | |||
+---+---+---+-------------------+ | +---+---+---+-------------------+ | |||
| Value Length (8+) | | | H | Value Length (7+) | | |||
+-------------------------------+ | +---+---------------------------+ | |||
| Value String (Length octets) | | | Value String (Length octets) | | |||
+-------------------------------+ | +-------------------------------+ | |||
Literal Header Field without Indexing - Indexed Name | Literal Header Field without Indexing - Indexed Name | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| 0 | 1 | 0 | | | 0 | 1 | 0 | | |||
+---+---+---+-------------------+ | +---+---+---+-------------------+ | |||
| Name Length (8+) | | | H | Name Length (7+) | | |||
+-------------------------------+ | +---+---------------------------+ | |||
| Name String (Length octets) | | | Name String (Length octets) | | |||
+-------------------------------+ | +---+---------------------------+ | |||
| Value Length (8+) | | | H | Value Length (7+) | | |||
+-------------------------------+ | +---+---------------------------+ | |||
| Value String (Length octets) | | | Value String (Length octets) | | |||
+-------------------------------+ | +-------------------------------+ | |||
Literal Header Field without Indexing - New Name | Literal Header Field without Indexing - New Name | |||
This representation starts with the '01' 2-bit pattern. | This representation starts with the '01' 2-bit pattern. | |||
If the header field name matches the header field name of a (name, | If the header field name matches the header field name of a (name, | |||
value) pair stored in the Header Table or Static Table, the header | value) pair stored in the Header Table or Static Table, the header | |||
field name can be represented using the index of that entry. In this | field name can be represented using the index of that entry. In this | |||
skipping to change at page 17, line 9 | skipping to change at page 16, line 48 | |||
4.3.2. Literal Header Field with Incremental Indexing | 4.3.2. Literal Header Field with Incremental Indexing | |||
A literal header field with incremental indexing adds a new entry to | A literal header field with incremental indexing adds a new entry to | |||
the header table. | the header table. | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| 0 | 0 | Index (6+) | | | 0 | 0 | Index (6+) | | |||
+---+---+---+-------------------+ | +---+---+---+-------------------+ | |||
| Value Length (8+) | | | H | Value Length (7+) | | |||
+-------------------------------+ | +---+---------------------------+ | |||
| Value String (Length octets) | | | Value String (Length octets) | | |||
+-------------------------------+ | +-------------------------------+ | |||
Literal Header Field with Incremental Indexing - Indexed Name | ||||
Literal Header Field with Incremental Indexing - | ||||
Indexed Name | ||||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | |||
| 0 | 0 | 0 | | | 0 | 0 | 0 | | |||
+---+---+---+-------------------+ | +---+---+---+-------------------+ | |||
| Name Length (8+) | | | H | Name Length (7+) | | |||
+-------------------------------+ | +---+---------------------------+ | |||
| Name String (Length octets) | | | Name String (Length octets) | | |||
+-------------------------------+ | +---+---------------------------+ | |||
| Value Length (8+) | | | H | Value Length (7+) | | |||
+-------------------------------+ | +---+---------------------------+ | |||
| Value String (Length octets) | | | Value String (Length octets) | | |||
+-------------------------------+ | +-------------------------------+ | |||
Literal Header Field with Incremental Indexing - | Literal Header Field with Incremental Indexing - New Name | |||
New Name | ||||
This representation starts with the '00' 2-bit pattern. | This representation starts with the '00' 2-bit pattern. | |||
If the header field name matches the header field name of a (name, | If the header field name matches the header field name of a (name, | |||
value) pair stored in the Header Table or Static Table, the header | value) pair stored in the Header Table or Static Table, the header | |||
field name can be represented using the index of that entry. In this | field name can be represented using the index of that entry. In this | |||
case, the index of the entry, index (which is strictly greater than | case, the index of the entry, index (which is strictly greater than | |||
0), is represented as an integer with a 6-bit prefix (see | 0), is represented as an integer with a 6-bit prefix (see | |||
Section 4.1.1). | Section 4.1.1). | |||
Otherwise, the header field name is represented as a literal. The | Otherwise, the header field name is represented as a literal. The | |||
value 0 is represented on 6 bits followed by the header field name | value 0 is represented on 6 bits followed by the header field name | |||
(see Section 4.1.2). | (see Section 4.1.2). | |||
The header field name representation is followed by the header field | The header field name representation is followed by the header field | |||
value represented as a literal string as described in Section 4.1.2. | value represented as a literal string as described in Section 4.1.2. | |||
4.4. Encoding Context Update | ||||
An indexed value of 0 is reserved for signalling changes in the | ||||
encoding context. The type of the change is encoded on the following | ||||
octet(s). Any change in the encoding context is applied immediately. | ||||
0 1 2 3 4 5 6 7 | ||||
+---+---+---+---+---+---+---+---+ | ||||
| 1 | 0 | | ||||
+---+---------------------------+ | ||||
Reference Set Emptying | ||||
An octet with its high bit set to '1' signals that the reference set | ||||
is emptied. The remaining bits are set to '0'. | ||||
0 1 2 3 4 5 6 7 | ||||
+---+---+---+---+---+---+---+---+ | ||||
| 0 | New maximum size (7+) | | ||||
+---+---------------------------+ | ||||
Maximum Header Table Size Change | ||||
An octet with its high bit set to '0' signals the new maximum size of | ||||
the header table. This new maximum size MUST be lower than or equal | ||||
to the value of the setting SETTINGS_HEADER_TABLE_SIZE (see [HTTP2]). | ||||
The new maximum size is encoded as an integer with a 7-bit prefix. | ||||
Change in the maximum size of the header table can trigger entry | ||||
evictions (see Section 3.3.2). | ||||
5. Security Considerations | 5. Security Considerations | |||
This compressor exists to solve security issues present in stream | This compressor exists to solve security issues present in stream | |||
compressors such as DEFLATE whereby the compression context can be | compressors such as DEFLATE whereby the compression context can be | |||
efficiently probed to reveal secrets. A conformant implementation of | efficiently probed to reveal secrets. A conformant implementation of | |||
this specification should be fairly safe against that kind of attack, | this specification should be fairly safe against that kind of attack, | |||
as the reaping of any information from the compression context | as the reaping of any information from the compression context | |||
requires more work than guessing and verifying the plain text data | requires more work than guessing and verifying the plain text data | |||
directly with the server. As with any secret, however, the longer | directly with the server. As with any secret, however, the longer | |||
the length of the secret, the more difficult the secret is to guess. | the length of the secret, the more difficult the secret is to guess. | |||
skipping to change at page 18, line 42 | skipping to change at page 19, line 9 | |||
memory consumed in the compressor state, by providing ways for the | memory consumed in the compressor state, by providing ways for the | |||
application to consume/flush the emitted header fields in small | application to consume/flush the emitted header fields in small | |||
chunks, and by considering overhead in the state size calculation. | chunks, and by considering overhead in the state size calculation. | |||
Implementors must still be careful in the creation of APIs to an | Implementors must still be careful in the creation of APIs to an | |||
implementation of this compressor by ensuring that header field keys | implementation of this compressor by ensuring that header field keys | |||
and values are either emitted as a stream, or that the compression | and values are either emitted as a stream, or that the compression | |||
implementation have a limit on the maximum size of a key or value. | implementation have a limit on the maximum size of a key or value. | |||
Failure to implement these kinds of safeguards may still result in a | Failure to implement these kinds of safeguards may still result in a | |||
scenario where the local endpoint exhausts its memory. | scenario where the local endpoint exhausts its memory. | |||
6. References | A particular care should be used for the maximum size of the header | |||
table. While an endpoint can fully control the maximum size of its | ||||
header table for the decoding size, by using | ||||
SETTINGS_HEADER_TABLE_SIZE, the maximum size of the encoding size is | ||||
controlled by the remote peer. The endpoint should check the | ||||
SETTINGS_HEADER_TABLE_SIZE defined by the remote peer, and decrease | ||||
the maximum size for the encoding size if needed. | ||||
6.1. Normative References | 6. Acknowledgements | |||
This document includes substantial editorial contributions from the | ||||
following individuals: Mike Bishop, Jeff Pinner, Julian Reschke, | ||||
Martin Thomson. | ||||
7. References | ||||
7.1. Normative References | ||||
[HTTP-p1] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [HTTP-p1] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Message Syntax and Routing", | Protocol (HTTP/1.1): Message Syntax and Routing", draft- | |||
draft-ietf-httpbis-p1-messaging-25 (work in progress), | ietf-httpbis-p1-messaging-26 (work in progress), February | |||
November 2013. | 2014. | |||
[HTTP2] Belshe, M., Peon, R., Thomson, M., Ed., and A. Melnikov, | [HTTP2] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | |||
Ed., "Hypertext Transfer Protocol version 2.0", | Transfer Protocol version 2", draft-ietf-httpbis-http2-10 | |||
draft-ietf-httpbis-http2-08 (work in progress), | (work in progress), February 2014. | |||
November 2013. | ||||
6.2. Informative References | 7.2. Informative References | |||
[CANON] Schwartz, E. and B. Kallick, "Generating a canonical | [CANON] Schwartz, E. and B. Kallick, "Generating a canonical | |||
prefix encoding", Communications of the ACM Volume 7 Issue | prefix encoding", Communications of the ACM Volume 7 Issue | |||
3, pp. 166-169, March 1964, | 3, pp. 166-169, March 1964, | |||
<http://dl.acm.org/citation.cfm?id=363991>. | <http://dl.acm.org/citation.cfm?id=363991>. | |||
[CRIME] Rizzo, J. and T. Duong, "The Crime Attack", | [CRIME] Rizzo, J. and T. Duong, "The CRIME Attack", September | |||
September 2012, <https://docs.google.com/a/twist.com/ | 2012, <https://docs.google.com/a/twist.com/presentation/d/ | |||
presentation/d/ | ||||
11eBmGiHbYcHR9gL5nDyZChu_-lCa2GizeuOfaLU2HOU/ | 11eBmGiHbYcHR9gL5nDyZChu_-lCa2GizeuOfaLU2HOU/ | |||
edit#slide=id.g1eb6c1b5_3_6>. | edit#slide=id.g1eb6c1b5_3_6>. | |||
[DEFLATE] Deutsch, P., "DEFLATE Compressed Data Format Specification | ||||
version 1.3", RFC 1951, May 1996. | ||||
[HUFF] Huffman, D., "A Method for the Construction of Minimum | [HUFF] Huffman, D., "A Method for the Construction of Minimum | |||
Redundancy Codes", Proceedings of the Institute of Radio | Redundancy Codes", Proceedings of the Institute of Radio | |||
Engineers Volume 40, Number 9, pp. 1098-1101, | Engineers Volume 40, Number 9, pp. 1098-1101, September | |||
September 1952, <http://ieeexplore.ieee.org/xpl/ | 1952, <http://ieeexplore.ieee.org/xpl/ | |||
articleDetails.jsp?arnumber=4051119>. | articleDetails.jsp?arnumber=4051119>. | |||
[PERF1] Belshe, M., "IETF83: SPDY and What to Consider for | [PERF1] Belshe, M., "IETF83: SPDY and What to Consider for HTTP/ | |||
HTTP/2.0", March 2012, <http://www.ietf.org/proceedings/ | 2.0", March 2012, <http://www.ietf.org/proceedings/83/ | |||
83/slides/slides-83-httpbis-3>. | slides/slides-83-httpbis-3>. | |||
[PERF2] McManus, P., "SPDY: What I Like About You", | [PERF2] McManus, P., "SPDY: What I Like About You", September | |||
September 2011, <http://bitsup.blogspot.com/2011/09/ | 2011, <http://bitsup.blogspot.com/2011/09/spdy-what-i | |||
spdy-what-i-like-about-you.html>. | -like-about-you.html>. | |||
[SPDY] Belshe, M. and R. Peon, "SPDY Protocol", | [SPDY] Belshe, M. and R. Peon, "SPDY Protocol", draft-mbelshe- | |||
draft-mbelshe-httpbis-spdy-00 (work in progress), | httpbis-spdy-00 (work in progress), February 2012. | |||
February 2012. | ||||
URIs | Appendix A. Change Log (to be removed by RFC Editor before publication | |||
[1] <http://en.wikipedia.org/wiki/Variable-length_quantity> | A.1. Since draft-ietf-httpbis-header-compression-05 | |||
Appendix A. Change Log (to be removed by RFC Editor before publication | o Regenerated examples. | |||
A.1. Since draft-ietf-httpbis-header-compression-04 | o Only one Huffman table for requests and responses. | |||
o Added maximum size for header table, independent of | ||||
SETTINGS_HEADER_TABLE_SIZE. | ||||
o Added pseudo-code for integer decoding. | ||||
o Improved examples (removing unnecessary removals). | ||||
A.2. Since draft-ietf-httpbis-header-compression-04 | ||||
o Updated examples: take into account changes in the spec, and show | o Updated examples: take into account changes in the spec, and show | |||
more features. | more features. | |||
o Use 'octet' everywhere instead of having both 'byte' and 'octet'. | o Use 'octet' everywhere instead of having both 'byte' and 'octet'. | |||
o Added reference set emptying. | o Added reference set emptying. | |||
o Editorial changes and clarifications. | o Editorial changes and clarifications. | |||
o Added "host" header to the static table. | o Added "host" header to the static table. | |||
o Ordering for list of values (either NULL- or comma-separated). | o Ordering for list of values (either NULL- or comma-separated). | |||
A.2. Since draft-ietf-httpbis-header-compression-03 | A.3. Since draft-ietf-httpbis-header-compression-03 | |||
o A large number of editorial changes; changed the description of | o A large number of editorial changes; changed the description of | |||
evicting/adding new entries. | evicting/adding new entries. | |||
o Removed substitution indexing | o Removed substitution indexing | |||
o Changed 'initial headers' to 'static headers', as per issue #258 | o Changed 'initial headers' to 'static headers', as per issue #258 | |||
o Merged 'request' and 'response' static headers, as per issue #259 | o Merged 'request' and 'response' static headers, as per issue #259 | |||
o Changed text to indicate that new headers are added at index 0 and | o Changed text to indicate that new headers are added at index 0 and | |||
expire from the largest index, as per issue #233 | expire from the largest index, as per issue #233 | |||
A.3. Since draft-ietf-httpbis-header-compression-02 | A.4. Since draft-ietf-httpbis-header-compression-02 | |||
o Corrected error in integer encoding pseudocode. | o Corrected error in integer encoding pseudocode. | |||
A.4. Since draft-ietf-httpbis-header-compression-01 | A.5. Since draft-ietf-httpbis-header-compression-01 | |||
o Refactored of Header Encoding Section: split definitions and | o Refactored of Header Encoding Section: split definitions and | |||
processing rule. | processing rule. | |||
o Backward incompatible change: Updated reference set management as | o Backward incompatible change: Updated reference set management as | |||
per issue #214. This changes how the interaction between the | per issue #214. This changes how the interaction between the | |||
reference set and eviction works. This also changes the working | reference set and eviction works. This also changes the working | |||
of the reference set in some specific cases. | of the reference set in some specific cases. | |||
o Backward incompatible change: modified initial header list, as per | o Backward incompatible change: modified initial header list, as per | |||
issue #188. | issue #188. | |||
o Added example of 32 octets entry structure (issue #191). | o Added example of 32 octets entry structure (issue #191). | |||
o Added Header Set Completion section. Reflowed some text. | o Added Header Set Completion section. Reflowed some text. | |||
Clarified some writing which was akward. Added text about | Clarified some writing which was akward. Added text about | |||
duplicate header entry encoding. Clarified some language w.r.t | duplicate header entry encoding. Clarified some language w.r.t | |||
Header Set. Changed x-my-header to mynewheader. Added text in the | Header Set. Changed x-my-header to mynewheader. Added text in | |||
HeaderEmission section indicating that the application may also be | the HeaderEmission section indicating that the application may | |||
able to free up memory more quickly. Added information in | also be able to free up memory more quickly. Added information in | |||
Security Considerations section. | Security Considerations section. | |||
A.5. Since draft-ietf-httpbis-header-compression-01 | A.6. Since draft-ietf-httpbis-header-compression-00 | |||
Fixed bug/omission in integer representation algorithm. | Fixed bug/omission in integer representation algorithm. | |||
Changed the document title. | Changed the document title. | |||
Header matching text rewritten. | Header matching text rewritten. | |||
Changed the definition of header emission. | Changed the definition of header emission. | |||
Changed the name of the setting which dictates how much memory the | Changed the name of the setting which dictates how much memory the | |||
skipping to change at page 21, line 34 | skipping to change at page 22, line 26 | |||
Removed security claims from introduction. | Removed security claims from introduction. | |||
Appendix B. Static Table | Appendix B. Static Table | |||
The static table consists of an unchangeable ordered list of (name, | The static table consists of an unchangeable ordered list of (name, | |||
value) pairs. The first entry in the table is always represented by | value) pairs. The first entry in the table is always represented by | |||
the index len(header table)+1, and the last entry in the table is | the index len(header table)+1, and the last entry in the table is | |||
represented by the index len(header table)+len(static table). | represented by the index len(header table)+len(static table). | |||
[[anchor9: The ordering of these tables is currently arbitrary. The | [[The ordering of these tables is currently arbitrary. The tables in | |||
tables in this section should be updated and ordered such that the | this section should be updated and ordered such that the table | |||
table entries with the smallest indices are those which, based on a | entries with the smallest indices are those which, based on a | |||
statistical analysis of the frequency of use weighted by size, | statistical analysis of the frequency of use weighted by size, | |||
achieve the largest decrease in octets transmitted subject to HTTP | achieve the largest decrease in octets transmitted subject to HTTP 2 | |||
2.0 header field rules (like removal of some header fields). This | header field rules (like removal of some header fields). This set of | |||
set of header fields is currently very likely incomplete, and should | header fields is currently very likely incomplete, and should be made | |||
be made complete.]] | complete. ]] | |||
The following table lists the pre-defined header fields that make-up | The following table lists the pre-defined header fields that make-up | |||
the static header table. | the static header table. | |||
+-------+-----------------------------+--------------+ | +-------+-----------------------------+--------------+ | |||
| Index | Header Name | Header Value | | | Index | Header Name | Header Value | | |||
+-------+-----------------------------+--------------+ | +-------+-----------------------------+--------------+ | |||
| 1 | :authority | | | | 1 | :authority | | | |||
| 2 | :method | GET | | | 2 | :method | GET | | |||
| 3 | :method | POST | | | 3 | :method | POST | | |||
skipping to change at page 23, line 21 | skipping to change at page 24, line 13 | |||
| 60 | www-authenticate | | | | 60 | www-authenticate | | | |||
+-------+-----------------------------+--------------+ | +-------+-----------------------------+--------------+ | |||
Table 1: Static Table Entries | Table 1: Static Table Entries | |||
The table give the index of each entry in the static table. The full | The table give the index of each entry in the static table. The full | |||
index of each entry, to be used for encoding a reference to this | index of each entry, to be used for encoding a reference to this | |||
entry, is computed by adding the number of entries in the header | entry, is computed by adding the number of entries in the header | |||
table to this index. | table to this index. | |||
Appendix C. Huffman Codes For Requests | Appendix C. Huffman Codes | |||
The following Huffman codes are used when encoding string literals in | ||||
the client to server direction. | ||||
[[anchor10: This table may need to be regenerated.]] | ||||
aligned aligned | ||||
to len to len | ||||
MSB in LSB in | ||||
sym as bits bits as hex bits | ||||
( 0) |11111111|11111111|11110111|010 [27] 7ffffba [27] | ||||
( 1) |11111111|11111111|11110111|011 [27] 7ffffbb [27] | ||||
( 2) |11111111|11111111|11110111|100 [27] 7ffffbc [27] | ||||
( 3) |11111111|11111111|11110111|101 [27] 7ffffbd [27] | ||||
( 4) |11111111|11111111|11110111|110 [27] 7ffffbe [27] | ||||
( 5) |11111111|11111111|11110111|111 [27] 7ffffbf [27] | ||||
( 6) |11111111|11111111|11111000|000 [27] 7ffffc0 [27] | ||||
( 7) |11111111|11111111|11111000|001 [27] 7ffffc1 [27] | ||||
( 8) |11111111|11111111|11111000|010 [27] 7ffffc2 [27] | ||||
( 9) |11111111|11111111|11111000|011 [27] 7ffffc3 [27] | ||||
( 10) |11111111|11111111|11111000|100 [27] 7ffffc4 [27] | ||||
( 11) |11111111|11111111|11111000|101 [27] 7ffffc5 [27] | ||||
( 12) |11111111|11111111|11111000|110 [27] 7ffffc6 [27] | ||||
( 13) |11111111|11111111|11111000|111 [27] 7ffffc7 [27] | ||||
( 14) |11111111|11111111|11111001|000 [27] 7ffffc8 [27] | ||||
( 15) |11111111|11111111|11111001|001 [27] 7ffffc9 [27] | ||||
( 16) |11111111|11111111|11111001|010 [27] 7ffffca [27] | ||||
( 17) |11111111|11111111|11111001|011 [27] 7ffffcb [27] | ||||
( 18) |11111111|11111111|11111001|100 [27] 7ffffcc [27] | ||||
( 19) |11111111|11111111|11111001|101 [27] 7ffffcd [27] | ||||
( 20) |11111111|11111111|11111001|110 [27] 7ffffce [27] | ||||
( 21) |11111111|11111111|11111001|111 [27] 7ffffcf [27] | ||||
( 22) |11111111|11111111|11111010|000 [27] 7ffffd0 [27] | ||||
( 23) |11111111|11111111|11111010|001 [27] 7ffffd1 [27] | ||||
( 24) |11111111|11111111|11111010|010 [27] 7ffffd2 [27] | ||||
( 25) |11111111|11111111|11111010|011 [27] 7ffffd3 [27] | ||||
( 26) |11111111|11111111|11111010|100 [27] 7ffffd4 [27] | ||||
( 27) |11111111|11111111|11111010|101 [27] 7ffffd5 [27] | ||||
( 28) |11111111|11111111|11111010|110 [27] 7ffffd6 [27] | ||||
( 29) |11111111|11111111|11111010|111 [27] 7ffffd7 [27] | ||||
( 30) |11111111|11111111|11111011|000 [27] 7ffffd8 [27] | ||||
( 31) |11111111|11111111|11111011|001 [27] 7ffffd9 [27] | ||||
' ' ( 32) |11101000| [8] e8 [8] | ||||
'!' ( 33) |11111111|1100 [12] ffc [12] | ||||
'"' ( 34) |11111111|111010 [14] 3ffa [14] | ||||
'#' ( 35) |11111111|1111100 [15] 7ffc [15] | ||||
'$' ( 36) |11111111|1111101 [15] 7ffd [15] | ||||
'%' ( 37) |100100 [6] 24 [6] | ||||
'&' ( 38) |1101110 [7] 6e [7] | ||||
''' ( 39) |11111111|1111110 [15] 7ffe [15] | ||||
'(' ( 40) |11111111|010 [11] 7fa [11] | ||||
')' ( 41) |11111111|011 [11] 7fb [11] | ||||
'*' ( 42) |11111110|10 [10] 3fa [10] | ||||
'+' ( 43) |11111111|100 [11] 7fc [11] | ||||
',' ( 44) |11101001| [8] e9 [8] | ||||
'-' ( 45) |100101 [6] 25 [6] | ||||
'.' ( 46) |00100 [5] 4 [5] | ||||
'/' ( 47) |0000 [4] 0 [4] | ||||
'0' ( 48) |00101 [5] 5 [5] | ||||
'1' ( 49) |00110 [5] 6 [5] | ||||
'2' ( 50) |00111 [5] 7 [5] | ||||
'3' ( 51) |100110 [6] 26 [6] | ||||
'4' ( 52) |100111 [6] 27 [6] | ||||
'5' ( 53) |101000 [6] 28 [6] | ||||
'6' ( 54) |101001 [6] 29 [6] | ||||
'7' ( 55) |101010 [6] 2a [6] | ||||
'8' ( 56) |101011 [6] 2b [6] | ||||
'9' ( 57) |101100 [6] 2c [6] | ||||
':' ( 58) |11110110|0 [9] 1ec [9] | ||||
';' ( 59) |11101010| [8] ea [8] | ||||
'<' ( 60) |11111111|11111111|10 [18] 3fffe [18] | ||||
'=' ( 61) |101101 [6] 2d [6] | ||||
'>' ( 62) |11111111|11111110|0 [17] 1fffc [17] | ||||
'?' ( 63) |11110110|1 [9] 1ed [9] | ||||
'@' ( 64) |11111111|111011 [14] 3ffb [14] | ||||
'A' ( 65) |1101111 [7] 6f [7] | ||||
'B' ( 66) |11101011| [8] eb [8] | ||||
'C' ( 67) |11101100| [8] ec [8] | ||||
'D' ( 68) |11101101| [8] ed [8] | ||||
'E' ( 69) |11101110| [8] ee [8] | ||||
'F' ( 70) |1110000 [7] 70 [7] | ||||
'G' ( 71) |11110111|0 [9] 1ee [9] | ||||
'H' ( 72) |11110111|1 [9] 1ef [9] | ||||
'I' ( 73) |11111000|0 [9] 1f0 [9] | ||||
'J' ( 74) |11111000|1 [9] 1f1 [9] | ||||
'K' ( 75) |11111110|11 [10] 3fb [10] | ||||
'L' ( 76) |11111001|0 [9] 1f2 [9] | ||||
'M' ( 77) |11101111| [8] ef [8] | ||||
'N' ( 78) |11111001|1 [9] 1f3 [9] | ||||
'O' ( 79) |11111010|0 [9] 1f4 [9] | ||||
'P' ( 80) |11111010|1 [9] 1f5 [9] | ||||
'Q' ( 81) |11111011|0 [9] 1f6 [9] | ||||
'R' ( 82) |11111011|1 [9] 1f7 [9] | ||||
'S' ( 83) |11110000| [8] f0 [8] | ||||
'T' ( 84) |11110001| [8] f1 [8] | ||||
'U' ( 85) |11111100|0 [9] 1f8 [9] | ||||
'V' ( 86) |11111100|1 [9] 1f9 [9] | ||||
'W' ( 87) |11111101|0 [9] 1fa [9] | ||||
'X' ( 88) |11111101|1 [9] 1fb [9] | ||||
'Y' ( 89) |11111110|0 [9] 1fc [9] | ||||
'Z' ( 90) |11111111|00 [10] 3fc [10] | ||||
'[' ( 91) |11111111|111100 [14] 3ffc [14] | ||||
'\' ( 92) |11111111|11111111|11111011|010 [27] 7ffffda [27] | ||||
']' ( 93) |11111111|11100 [13] 1ffc [13] | ||||
'^' ( 94) |11111111|111101 [14] 3ffd [14] | ||||
'_' ( 95) |101110 [6] 2e [6] | ||||
'`' ( 96) |11111111|11111111|110 [19] 7fffe [19] | ||||
'a' ( 97) |01000 [5] 8 [5] | ||||
'b' ( 98) |101111 [6] 2f [6] | ||||
'c' ( 99) |01001 [5] 9 [5] | ||||
'd' (100) |110000 [6] 30 [6] | ||||
'e' (101) |0001 [4] 1 [4] | ||||
'f' (102) |110001 [6] 31 [6] | ||||
'g' (103) |110010 [6] 32 [6] | ||||
'h' (104) |110011 [6] 33 [6] | ||||
'i' (105) |01010 [5] a [5] | ||||
'j' (106) |1110001 [7] 71 [7] | ||||
'k' (107) |1110010 [7] 72 [7] | ||||
'l' (108) |01011 [5] b [5] | ||||
'm' (109) |110100 [6] 34 [6] | ||||
'n' (110) |01100 [5] c [5] | ||||
'o' (111) |01101 [5] d [5] | ||||
'p' (112) |01110 [5] e [5] | ||||
'q' (113) |11110010| [8] f2 [8] | ||||
'r' (114) |01111 [5] f [5] | ||||
's' (115) |10000 [5] 10 [5] | ||||
't' (116) |10001 [5] 11 [5] | ||||
'u' (117) |110101 [6] 35 [6] | ||||
'v' (118) |1110011 [7] 73 [7] | ||||
'w' (119) |110110 [6] 36 [6] | ||||
'x' (120) |11110011| [8] f3 [8] | ||||
'y' (121) |11110100| [8] f4 [8] | ||||
'z' (122) |11110101| [8] f5 [8] | ||||
'{' (123) |11111111|11111110|1 [17] 1fffd [17] | ||||
'|' (124) |11111111|101 [11] 7fd [11] | ||||
'}' (125) |11111111|11111111|0 [17] 1fffe [17] | ||||
'~' (126) |11111111|1101 [12] ffd [12] | ||||
(127) |11111111|11111111|11111011|011 [27] 7ffffdb [27] | ||||
(128) |11111111|11111111|11111011|100 [27] 7ffffdc [27] | ||||
(129) |11111111|11111111|11111011|101 [27] 7ffffdd [27] | ||||
(130) |11111111|11111111|11111011|110 [27] 7ffffde [27] | ||||
(131) |11111111|11111111|11111011|111 [27] 7ffffdf [27] | ||||
(132) |11111111|11111111|11111100|000 [27] 7ffffe0 [27] | ||||
(133) |11111111|11111111|11111100|001 [27] 7ffffe1 [27] | ||||
(134) |11111111|11111111|11111100|010 [27] 7ffffe2 [27] | ||||
(135) |11111111|11111111|11111100|011 [27] 7ffffe3 [27] | ||||
(136) |11111111|11111111|11111100|100 [27] 7ffffe4 [27] | ||||
(137) |11111111|11111111|11111100|101 [27] 7ffffe5 [27] | ||||
(138) |11111111|11111111|11111100|110 [27] 7ffffe6 [27] | ||||
(139) |11111111|11111111|11111100|111 [27] 7ffffe7 [27] | ||||
(140) |11111111|11111111|11111101|000 [27] 7ffffe8 [27] | ||||
(141) |11111111|11111111|11111101|001 [27] 7ffffe9 [27] | ||||
(142) |11111111|11111111|11111101|010 [27] 7ffffea [27] | ||||
(143) |11111111|11111111|11111101|011 [27] 7ffffeb [27] | ||||
(144) |11111111|11111111|11111101|100 [27] 7ffffec [27] | ||||
(145) |11111111|11111111|11111101|101 [27] 7ffffed [27] | ||||
(146) |11111111|11111111|11111101|110 [27] 7ffffee [27] | ||||
(147) |11111111|11111111|11111101|111 [27] 7ffffef [27] | ||||
(148) |11111111|11111111|11111110|000 [27] 7fffff0 [27] | ||||
(149) |11111111|11111111|11111110|001 [27] 7fffff1 [27] | ||||
(150) |11111111|11111111|11111110|010 [27] 7fffff2 [27] | ||||
(151) |11111111|11111111|11111110|011 [27] 7fffff3 [27] | ||||
(152) |11111111|11111111|11111110|100 [27] 7fffff4 [27] | ||||
(153) |11111111|11111111|11111110|101 [27] 7fffff5 [27] | ||||
(154) |11111111|11111111|11111110|110 [27] 7fffff6 [27] | ||||
(155) |11111111|11111111|11111110|111 [27] 7fffff7 [27] | ||||
(156) |11111111|11111111|11111111|000 [27] 7fffff8 [27] | ||||
(157) |11111111|11111111|11111111|001 [27] 7fffff9 [27] | ||||
(158) |11111111|11111111|11111111|010 [27] 7fffffa [27] | ||||
(159) |11111111|11111111|11111111|011 [27] 7fffffb [27] | ||||
(160) |11111111|11111111|11111111|100 [27] 7fffffc [27] | ||||
(161) |11111111|11111111|11111111|101 [27] 7fffffd [27] | ||||
(162) |11111111|11111111|11111111|110 [27] 7fffffe [27] | ||||
(163) |11111111|11111111|11111111|111 [27] 7ffffff [27] | ||||
(164) |11111111|11111111|11100000|00 [26] 3ffff80 [26] | ||||
(165) |11111111|11111111|11100000|01 [26] 3ffff81 [26] | ||||
(166) |11111111|11111111|11100000|10 [26] 3ffff82 [26] | ||||
(167) |11111111|11111111|11100000|11 [26] 3ffff83 [26] | ||||
(168) |11111111|11111111|11100001|00 [26] 3ffff84 [26] | ||||
(169) |11111111|11111111|11100001|01 [26] 3ffff85 [26] | ||||
(170) |11111111|11111111|11100001|10 [26] 3ffff86 [26] | ||||
(171) |11111111|11111111|11100001|11 [26] 3ffff87 [26] | ||||
(172) |11111111|11111111|11100010|00 [26] 3ffff88 [26] | ||||
(173) |11111111|11111111|11100010|01 [26] 3ffff89 [26] | ||||
(174) |11111111|11111111|11100010|10 [26] 3ffff8a [26] | ||||
(175) |11111111|11111111|11100010|11 [26] 3ffff8b [26] | ||||
(176) |11111111|11111111|11100011|00 [26] 3ffff8c [26] | ||||
(177) |11111111|11111111|11100011|01 [26] 3ffff8d [26] | ||||
(178) |11111111|11111111|11100011|10 [26] 3ffff8e [26] | ||||
(179) |11111111|11111111|11100011|11 [26] 3ffff8f [26] | ||||
(180) |11111111|11111111|11100100|00 [26] 3ffff90 [26] | ||||
(181) |11111111|11111111|11100100|01 [26] 3ffff91 [26] | ||||
(182) |11111111|11111111|11100100|10 [26] 3ffff92 [26] | ||||
(183) |11111111|11111111|11100100|11 [26] 3ffff93 [26] | ||||
(184) |11111111|11111111|11100101|00 [26] 3ffff94 [26] | ||||
(185) |11111111|11111111|11100101|01 [26] 3ffff95 [26] | ||||
(186) |11111111|11111111|11100101|10 [26] 3ffff96 [26] | ||||
(187) |11111111|11111111|11100101|11 [26] 3ffff97 [26] | ||||
(188) |11111111|11111111|11100110|00 [26] 3ffff98 [26] | ||||
(189) |11111111|11111111|11100110|01 [26] 3ffff99 [26] | ||||
(190) |11111111|11111111|11100110|10 [26] 3ffff9a [26] | ||||
(191) |11111111|11111111|11100110|11 [26] 3ffff9b [26] | ||||
(192) |11111111|11111111|11100111|00 [26] 3ffff9c [26] | ||||
(193) |11111111|11111111|11100111|01 [26] 3ffff9d [26] | ||||
(194) |11111111|11111111|11100111|10 [26] 3ffff9e [26] | ||||
(195) |11111111|11111111|11100111|11 [26] 3ffff9f [26] | ||||
(196) |11111111|11111111|11101000|00 [26] 3ffffa0 [26] | ||||
(197) |11111111|11111111|11101000|01 [26] 3ffffa1 [26] | ||||
(198) |11111111|11111111|11101000|10 [26] 3ffffa2 [26] | ||||
(199) |11111111|11111111|11101000|11 [26] 3ffffa3 [26] | ||||
(200) |11111111|11111111|11101001|00 [26] 3ffffa4 [26] | ||||
(201) |11111111|11111111|11101001|01 [26] 3ffffa5 [26] | ||||
(202) |11111111|11111111|11101001|10 [26] 3ffffa6 [26] | ||||
(203) |11111111|11111111|11101001|11 [26] 3ffffa7 [26] | ||||
(204) |11111111|11111111|11101010|00 [26] 3ffffa8 [26] | ||||
(205) |11111111|11111111|11101010|01 [26] 3ffffa9 [26] | ||||
(206) |11111111|11111111|11101010|10 [26] 3ffffaa [26] | ||||
(207) |11111111|11111111|11101010|11 [26] 3ffffab [26] | ||||
(208) |11111111|11111111|11101011|00 [26] 3ffffac [26] | ||||
(209) |11111111|11111111|11101011|01 [26] 3ffffad [26] | ||||
(210) |11111111|11111111|11101011|10 [26] 3ffffae [26] | ||||
(211) |11111111|11111111|11101011|11 [26] 3ffffaf [26] | ||||
(212) |11111111|11111111|11101100|00 [26] 3ffffb0 [26] | ||||
(213) |11111111|11111111|11101100|01 [26] 3ffffb1 [26] | ||||
(214) |11111111|11111111|11101100|10 [26] 3ffffb2 [26] | ||||
(215) |11111111|11111111|11101100|11 [26] 3ffffb3 [26] | ||||
(216) |11111111|11111111|11101101|00 [26] 3ffffb4 [26] | ||||
(217) |11111111|11111111|11101101|01 [26] 3ffffb5 [26] | ||||
(218) |11111111|11111111|11101101|10 [26] 3ffffb6 [26] | ||||
(219) |11111111|11111111|11101101|11 [26] 3ffffb7 [26] | ||||
(220) |11111111|11111111|11101110|00 [26] 3ffffb8 [26] | ||||
(221) |11111111|11111111|11101110|01 [26] 3ffffb9 [26] | ||||
(222) |11111111|11111111|11101110|10 [26] 3ffffba [26] | ||||
(223) |11111111|11111111|11101110|11 [26] 3ffffbb [26] | ||||
(224) |11111111|11111111|11101111|00 [26] 3ffffbc [26] | ||||
(225) |11111111|11111111|11101111|01 [26] 3ffffbd [26] | ||||
(226) |11111111|11111111|11101111|10 [26] 3ffffbe [26] | ||||
(227) |11111111|11111111|11101111|11 [26] 3ffffbf [26] | ||||
(228) |11111111|11111111|11110000|00 [26] 3ffffc0 [26] | ||||
(229) |11111111|11111111|11110000|01 [26] 3ffffc1 [26] | ||||
(230) |11111111|11111111|11110000|10 [26] 3ffffc2 [26] | ||||
(231) |11111111|11111111|11110000|11 [26] 3ffffc3 [26] | ||||
(232) |11111111|11111111|11110001|00 [26] 3ffffc4 [26] | ||||
(233) |11111111|11111111|11110001|01 [26] 3ffffc5 [26] | ||||
(234) |11111111|11111111|11110001|10 [26] 3ffffc6 [26] | ||||
(235) |11111111|11111111|11110001|11 [26] 3ffffc7 [26] | ||||
(236) |11111111|11111111|11110010|00 [26] 3ffffc8 [26] | ||||
(237) |11111111|11111111|11110010|01 [26] 3ffffc9 [26] | ||||
(238) |11111111|11111111|11110010|10 [26] 3ffffca [26] | ||||
(239) |11111111|11111111|11110010|11 [26] 3ffffcb [26] | ||||
(240) |11111111|11111111|11110011|00 [26] 3ffffcc [26] | ||||
(241) |11111111|11111111|11110011|01 [26] 3ffffcd [26] | ||||
(242) |11111111|11111111|11110011|10 [26] 3ffffce [26] | ||||
(243) |11111111|11111111|11110011|11 [26] 3ffffcf [26] | ||||
(244) |11111111|11111111|11110100|00 [26] 3ffffd0 [26] | ||||
(245) |11111111|11111111|11110100|01 [26] 3ffffd1 [26] | ||||
(246) |11111111|11111111|11110100|10 [26] 3ffffd2 [26] | ||||
(247) |11111111|11111111|11110100|11 [26] 3ffffd3 [26] | ||||
(248) |11111111|11111111|11110101|00 [26] 3ffffd4 [26] | ||||
(249) |11111111|11111111|11110101|01 [26] 3ffffd5 [26] | ||||
(250) |11111111|11111111|11110101|10 [26] 3ffffd6 [26] | ||||
(251) |11111111|11111111|11110101|11 [26] 3ffffd7 [26] | ||||
(252) |11111111|11111111|11110110|00 [26] 3ffffd8 [26] | ||||
(253) |11111111|11111111|11110110|01 [26] 3ffffd9 [26] | ||||
(254) |11111111|11111111|11110110|10 [26] 3ffffda [26] | ||||
(255) |11111111|11111111|11110110|11 [26] 3ffffdb [26] | ||||
EOS (256) |11111111|11111111|11110111|00 [26] 3ffffdc [26] | ||||
Appendix D. Huffman Codes for Responses | ||||
The following Huffman codes are used when encoding string literals in | The following Huffman codes are used when encoding string literals. | |||
the server to client direction. These codes apply for both responses | ||||
to client requests and for push-promises. | ||||
[[anchor11: This table may need to be regenerated.]] | [[This table will be regenerated. ]] | |||
aligned aligned | aligned aligned | |||
to len to len | to len to len | |||
MSB in LSB in | MSB in LSB in | |||
sym as bits bits as hex bits | sym as bits bits as hex bits | |||
( 0) |11111111|11111111|11011110|0 [25] 1ffffbc [25] | ( 0) |11111111|11111111|11110111|010 [27] 7ffffba [27] | |||
( 1) |11111111|11111111|11011110|1 [25] 1ffffbd [25] | ( 1) |11111111|11111111|11110111|011 [27] 7ffffbb [27] | |||
( 2) |11111111|11111111|11011111|0 [25] 1ffffbe [25] | ( 2) |11111111|11111111|11110111|100 [27] 7ffffbc [27] | |||
( 3) |11111111|11111111|11011111|1 [25] 1ffffbf [25] | ( 3) |11111111|11111111|11110111|101 [27] 7ffffbd [27] | |||
( 4) |11111111|11111111|11100000|0 [25] 1ffffc0 [25] | ( 4) |11111111|11111111|11110111|110 [27] 7ffffbe [27] | |||
( 5) |11111111|11111111|11100000|1 [25] 1ffffc1 [25] | ( 5) |11111111|11111111|11110111|111 [27] 7ffffbf [27] | |||
( 6) |11111111|11111111|11100001|0 [25] 1ffffc2 [25] | ( 6) |11111111|11111111|11111000|000 [27] 7ffffc0 [27] | |||
( 7) |11111111|11111111|11100001|1 [25] 1ffffc3 [25] | ( 7) |11111111|11111111|11111000|001 [27] 7ffffc1 [27] | |||
( 8) |11111111|11111111|11100010|0 [25] 1ffffc4 [25] | ( 8) |11111111|11111111|11111000|010 [27] 7ffffc2 [27] | |||
( 9) |11111111|11111111|11100010|1 [25] 1ffffc5 [25] | ( 9) |11111111|11111111|11111000|011 [27] 7ffffc3 [27] | |||
( 10) |11111111|11111111|11100011|0 [25] 1ffffc6 [25] | ( 10) |11111111|11111111|11111000|100 [27] 7ffffc4 [27] | |||
( 11) |11111111|11111111|11100011|1 [25] 1ffffc7 [25] | ( 11) |11111111|11111111|11111000|101 [27] 7ffffc5 [27] | |||
( 12) |11111111|11111111|11100100|0 [25] 1ffffc8 [25] | ( 12) |11111111|11111111|11111000|110 [27] 7ffffc6 [27] | |||
( 13) |11111111|11111111|11100100|1 [25] 1ffffc9 [25] | ( 13) |11111111|11111111|11111000|111 [27] 7ffffc7 [27] | |||
( 14) |11111111|11111111|11100101|0 [25] 1ffffca [25] | ( 14) |11111111|11111111|11111001|000 [27] 7ffffc8 [27] | |||
( 15) |11111111|11111111|11100101|1 [25] 1ffffcb [25] | ( 15) |11111111|11111111|11111001|001 [27] 7ffffc9 [27] | |||
( 16) |11111111|11111111|11100110|0 [25] 1ffffcc [25] | ( 16) |11111111|11111111|11111001|010 [27] 7ffffca [27] | |||
( 17) |11111111|11111111|11100110|1 [25] 1ffffcd [25] | ( 17) |11111111|11111111|11111001|011 [27] 7ffffcb [27] | |||
( 18) |11111111|11111111|11100111|0 [25] 1ffffce [25] | ( 18) |11111111|11111111|11111001|100 [27] 7ffffcc [27] | |||
( 19) |11111111|11111111|11100111|1 [25] 1ffffcf [25] | ( 19) |11111111|11111111|11111001|101 [27] 7ffffcd [27] | |||
( 20) |11111111|11111111|11101000|0 [25] 1ffffd0 [25] | ( 20) |11111111|11111111|11111001|110 [27] 7ffffce [27] | |||
( 21) |11111111|11111111|11101000|1 [25] 1ffffd1 [25] | ( 21) |11111111|11111111|11111001|111 [27] 7ffffcf [27] | |||
( 22) |11111111|11111111|11101001|0 [25] 1ffffd2 [25] | ( 22) |11111111|11111111|11111010|000 [27] 7ffffd0 [27] | |||
( 23) |11111111|11111111|11101001|1 [25] 1ffffd3 [25] | ( 23) |11111111|11111111|11111010|001 [27] 7ffffd1 [27] | |||
( 24) |11111111|11111111|11101010|0 [25] 1ffffd4 [25] | ( 24) |11111111|11111111|11111010|010 [27] 7ffffd2 [27] | |||
( 25) |11111111|11111111|11101010|1 [25] 1ffffd5 [25] | ( 25) |11111111|11111111|11111010|011 [27] 7ffffd3 [27] | |||
( 26) |11111111|11111111|11101011|0 [25] 1ffffd6 [25] | ( 26) |11111111|11111111|11111010|100 [27] 7ffffd4 [27] | |||
( 27) |11111111|11111111|11101011|1 [25] 1ffffd7 [25] | ( 27) |11111111|11111111|11111010|101 [27] 7ffffd5 [27] | |||
( 28) |11111111|11111111|11101100|0 [25] 1ffffd8 [25] | ( 28) |11111111|11111111|11111010|110 [27] 7ffffd6 [27] | |||
( 29) |11111111|11111111|11101100|1 [25] 1ffffd9 [25] | ( 29) |11111111|11111111|11111010|111 [27] 7ffffd7 [27] | |||
( 30) |11111111|11111111|11101101|0 [25] 1ffffda [25] | ( 30) |11111111|11111111|11111011|000 [27] 7ffffd8 [27] | |||
( 31) |11111111|11111111|11101101|1 [25] 1ffffdb [25] | ( 31) |11111111|11111111|11111011|001 [27] 7ffffd9 [27] | |||
' ' ( 32) |0000 [4] 0 [4] | ' ' ( 32) |11101000| [8] e8 [8] | |||
'!' ( 33) |11111111|1010 [12] ffa [12] | '!' ( 33) |11111111|1100 [12] ffc [12] | |||
'"' ( 34) |1101010 [7] 6a [7] | '"' ( 34) |11111111|111010 [14] 3ffa [14] | |||
'#' ( 35) |11111111|11010 [13] 1ffa [13] | '#' ( 35) |11111111|1111100 [15] 7ffc [15] | |||
'$' ( 36) |11111111|111100 [14] 3ffc [14] | '$' ( 36) |11111111|1111101 [15] 7ffd [15] | |||
'%' ( 37) |11110110|0 [9] 1ec [9] | '%' ( 37) |100100 [6] 24 [6] | |||
'&' ( 38) |11111110|00 [10] 3f8 [10] | '&' ( 38) |1101110 [7] 6e [7] | |||
''' ( 39) |11111111|11011 [13] 1ffb [13] | ''' ( 39) |11111111|1111110 [15] 7ffe [15] | |||
'(' ( 40) |11110110|1 [9] 1ed [9] | '(' ( 40) |11111111|010 [11] 7fa [11] | |||
')' ( 41) |11110111|0 [9] 1ee [9] | ')' ( 41) |11111111|011 [11] 7fb [11] | |||
'*' ( 42) |11111111|1011 [12] ffb [12] | '*' ( 42) |11111110|10 [10] 3fa [10] | |||
'+' ( 43) |11111111|010 [11] 7fa [11] | '+' ( 43) |11111111|100 [11] 7fc [11] | |||
',' ( 44) |100010 [6] 22 [6] | ',' ( 44) |11101001| [8] e9 [8] | |||
'-' ( 45) |100011 [6] 23 [6] | '-' ( 45) |100101 [6] 25 [6] | |||
'.' ( 46) |100100 [6] 24 [6] | '.' ( 46) |00100 [5] 4 [5] | |||
'/' ( 47) |1101011 [7] 6b [7] | '/' ( 47) |0000 [4] 0 [4] | |||
'0' ( 48) |0001 [4] 1 [4] | '0' ( 48) |00101 [5] 5 [5] | |||
'1' ( 49) |0010 [4] 2 [4] | '1' ( 49) |00110 [5] 6 [5] | |||
'2' ( 50) |0011 [4] 3 [4] | '2' ( 50) |00111 [5] 7 [5] | |||
'3' ( 51) |01000 [5] 8 [5] | '3' ( 51) |100110 [6] 26 [6] | |||
'4' ( 52) |01001 [5] 9 [5] | '4' ( 52) |100111 [6] 27 [6] | |||
'5' ( 53) |01010 [5] a [5] | '5' ( 53) |101000 [6] 28 [6] | |||
'6' ( 54) |100101 [6] 25 [6] | '6' ( 54) |101001 [6] 29 [6] | |||
'7' ( 55) |100110 [6] 26 [6] | '7' ( 55) |101010 [6] 2a [6] | |||
'8' ( 56) |01011 [5] b [5] | '8' ( 56) |101011 [6] 2b [6] | |||
'9' ( 57) |01100 [5] c [5] | '9' ( 57) |101100 [6] 2c [6] | |||
':' ( 58) |01101 [5] d [5] | ':' ( 58) |11110110|0 [9] 1ec [9] | |||
';' ( 59) |11110111|1 [9] 1ef [9] | ';' ( 59) |11101010| [8] ea [8] | |||
'<' ( 60) |11111111|11111010| [16] fffa [16] | '<' ( 60) |11111111|11111111|10 [18] 3fffe [18] | |||
'=' ( 61) |1101100 [7] 6c [7] | '=' ( 61) |101101 [6] 2d [6] | |||
'>' ( 62) |11111111|11100 [13] 1ffc [13] | '>' ( 62) |11111111|11111110|0 [17] 1fffc [17] | |||
'?' ( 63) |11111111|1100 [12] ffc [12] | '?' ( 63) |11110110|1 [9] 1ed [9] | |||
'@' ( 64) |11111111|11111011| [16] fffb [16] | '@' ( 64) |11111111|111011 [14] 3ffb [14] | |||
'A' ( 65) |1101101 [7] 6d [7] | 'A' ( 65) |1101111 [7] 6f [7] | |||
'B' ( 66) |11101010| [8] ea [8] | 'B' ( 66) |11101011| [8] eb [8] | |||
'C' ( 67) |11101011| [8] eb [8] | 'C' ( 67) |11101100| [8] ec [8] | |||
'D' ( 68) |11101100| [8] ec [8] | 'D' ( 68) |11101101| [8] ed [8] | |||
'E' ( 69) |11101101| [8] ed [8] | 'E' ( 69) |11101110| [8] ee [8] | |||
'F' ( 70) |11101110| [8] ee [8] | 'F' ( 70) |1110000 [7] 70 [7] | |||
'G' ( 71) |100111 [6] 27 [6] | 'G' ( 71) |11110111|0 [9] 1ee [9] | |||
'H' ( 72) |11111000|0 [9] 1f0 [9] | 'H' ( 72) |11110111|1 [9] 1ef [9] | |||
'I' ( 73) |11101111| [8] ef [8] | 'I' ( 73) |11111000|0 [9] 1f0 [9] | |||
'J' ( 74) |11110000| [8] f0 [8] | 'J' ( 74) |11111000|1 [9] 1f1 [9] | |||
'K' ( 75) |11111110|01 [10] 3f9 [10] | 'K' ( 75) |11111110|11 [10] 3fb [10] | |||
'L' ( 76) |11111000|1 [9] 1f1 [9] | 'L' ( 76) |11111001|0 [9] 1f2 [9] | |||
'M' ( 77) |101000 [6] 28 [6] | 'M' ( 77) |11101111| [8] ef [8] | |||
'N' ( 78) |11110001| [8] f1 [8] | 'N' ( 78) |11111001|1 [9] 1f3 [9] | |||
'O' ( 79) |11110010| [8] f2 [8] | 'O' ( 79) |11111010|0 [9] 1f4 [9] | |||
'P' ( 80) |11111001|0 [9] 1f2 [9] | 'P' ( 80) |11111010|1 [9] 1f5 [9] | |||
'Q' ( 81) |11111110|10 [10] 3fa [10] | 'Q' ( 81) |11111011|0 [9] 1f6 [9] | |||
'R' ( 82) |11111001|1 [9] 1f3 [9] | 'R' ( 82) |11111011|1 [9] 1f7 [9] | |||
'S' ( 83) |101001 [6] 29 [6] | 'S' ( 83) |11110000| [8] f0 [8] | |||
'T' ( 84) |01110 [5] e [5] | 'T' ( 84) |11110001| [8] f1 [8] | |||
'U' ( 85) |11111010|0 [9] 1f4 [9] | 'U' ( 85) |11111100|0 [9] 1f8 [9] | |||
'V' ( 86) |11111010|1 [9] 1f5 [9] | 'V' ( 86) |11111100|1 [9] 1f9 [9] | |||
'W' ( 87) |11110011| [8] f3 [8] | 'W' ( 87) |11111101|0 [9] 1fa [9] | |||
'X' ( 88) |11111110|11 [10] 3fb [10] | 'X' ( 88) |11111101|1 [9] 1fb [9] | |||
'Y' ( 89) |11111011|0 [9] 1f6 [9] | 'Y' ( 89) |11111110|0 [9] 1fc [9] | |||
'Z' ( 90) |11111111|00 [10] 3fc [10] | 'Z' ( 90) |11111111|00 [10] 3fc [10] | |||
'[' ( 91) |11111111|011 [11] 7fb [11] | '[' ( 91) |11111111|111100 [14] 3ffc [14] | |||
'\' ( 92) |11111111|11101 [13] 1ffd [13] | '\' ( 92) |11111111|11111111|11111011|010 [27] 7ffffda [27] | |||
']' ( 93) |11111111|100 [11] 7fc [11] | ']' ( 93) |11111111|11100 [13] 1ffc [13] | |||
'^' ( 94) |11111111|1111100 [15] 7ffc [15] | '^' ( 94) |11111111|111101 [14] 3ffd [14] | |||
'_' ( 95) |11111011|1 [9] 1f7 [9] | '_' ( 95) |101110 [6] 2e [6] | |||
'`' ( 96) |11111111|11111111|0 [17] 1fffe [17] | '`' ( 96) |11111111|11111111|110 [19] 7fffe [19] | |||
'a' ( 97) |01111 [5] f [5] | 'a' ( 97) |01000 [5] 8 [5] | |||
'b' ( 98) |1101110 [7] 6e [7] | 'b' ( 98) |101111 [6] 2f [6] | |||
'c' ( 99) |101010 [6] 2a [6] | 'c' ( 99) |01001 [5] 9 [5] | |||
'd' (100) |101011 [6] 2b [6] | 'd' (100) |110000 [6] 30 [6] | |||
'e' (101) |10000 [5] 10 [5] | 'e' (101) |0001 [4] 1 [4] | |||
'f' (102) |1101111 [7] 6f [7] | 'f' (102) |110001 [6] 31 [6] | |||
'g' (103) |1110000 [7] 70 [7] | 'g' (103) |110010 [6] 32 [6] | |||
'h' (104) |1110001 [7] 71 [7] | 'h' (104) |110011 [6] 33 [6] | |||
'i' (105) |101100 [6] 2c [6] | 'i' (105) |01010 [5] a [5] | |||
'j' (106) |11111100|0 [9] 1f8 [9] | 'j' (106) |1110001 [7] 71 [7] | |||
'k' (107) |11111100|1 [9] 1f9 [9] | 'k' (107) |1110010 [7] 72 [7] | |||
'l' (108) |1110010 [7] 72 [7] | 'l' (108) |01011 [5] b [5] | |||
'm' (109) |101101 [6] 2d [6] | 'm' (109) |110100 [6] 34 [6] | |||
'n' (110) |101110 [6] 2e [6] | 'n' (110) |01100 [5] c [5] | |||
'o' (111) |101111 [6] 2f [6] | 'o' (111) |01101 [5] d [5] | |||
'p' (112) |110000 [6] 30 [6] | 'p' (112) |01110 [5] e [5] | |||
'q' (113) |11111101|0 [9] 1fa [9] | 'q' (113) |11110010| [8] f2 [8] | |||
'r' (114) |110001 [6] 31 [6] | 'r' (114) |01111 [5] f [5] | |||
's' (115) |110010 [6] 32 [6] | 's' (115) |10000 [5] 10 [5] | |||
't' (116) |110011 [6] 33 [6] | 't' (116) |10001 [5] 11 [5] | |||
'u' (117) |110100 [6] 34 [6] | 'u' (117) |110101 [6] 35 [6] | |||
'v' (118) |1110011 [7] 73 [7] | 'v' (118) |1110011 [7] 73 [7] | |||
'w' (119) |11110100| [8] f4 [8] | 'w' (119) |110110 [6] 36 [6] | |||
'x' (120) |1110100 [7] 74 [7] | 'x' (120) |11110011| [8] f3 [8] | |||
'y' (121) |11110101| [8] f5 [8] | 'y' (121) |11110100| [8] f4 [8] | |||
'z' (122) |11111101|1 [9] 1fb [9] | 'z' (122) |11110101| [8] f5 [8] | |||
'{' (123) |11111111|11111100| [16] fffc [16] | '{' (123) |11111111|11111110|1 [17] 1fffd [17] | |||
'|' (124) |11111111|111101 [14] 3ffd [14] | '|' (124) |11111111|101 [11] 7fd [11] | |||
'}' (125) |11111111|11111101| [16] fffd [16] | '}' (125) |11111111|11111111|0 [17] 1fffe [17] | |||
'~' (126) |11111111|11111110| [16] fffe [16] | '~' (126) |11111111|1101 [12] ffd [12] | |||
(127) |11111111|11111111|11101110|0 [25] 1ffffdc [25] | (127) |11111111|11111111|11111011|011 [27] 7ffffdb [27] | |||
(128) |11111111|11111111|11101110|1 [25] 1ffffdd [25] | (128) |11111111|11111111|11111011|100 [27] 7ffffdc [27] | |||
(129) |11111111|11111111|11101111|0 [25] 1ffffde [25] | (129) |11111111|11111111|11111011|101 [27] 7ffffdd [27] | |||
(130) |11111111|11111111|11101111|1 [25] 1ffffdf [25] | (130) |11111111|11111111|11111011|110 [27] 7ffffde [27] | |||
(131) |11111111|11111111|11110000|0 [25] 1ffffe0 [25] | (131) |11111111|11111111|11111011|111 [27] 7ffffdf [27] | |||
(132) |11111111|11111111|11110000|1 [25] 1ffffe1 [25] | (132) |11111111|11111111|11111100|000 [27] 7ffffe0 [27] | |||
(133) |11111111|11111111|11110001|0 [25] 1ffffe2 [25] | (133) |11111111|11111111|11111100|001 [27] 7ffffe1 [27] | |||
(134) |11111111|11111111|11110001|1 [25] 1ffffe3 [25] | (134) |11111111|11111111|11111100|010 [27] 7ffffe2 [27] | |||
(135) |11111111|11111111|11110010|0 [25] 1ffffe4 [25] | (135) |11111111|11111111|11111100|011 [27] 7ffffe3 [27] | |||
(136) |11111111|11111111|11110010|1 [25] 1ffffe5 [25] | (136) |11111111|11111111|11111100|100 [27] 7ffffe4 [27] | |||
(137) |11111111|11111111|11110011|0 [25] 1ffffe6 [25] | (137) |11111111|11111111|11111100|101 [27] 7ffffe5 [27] | |||
(138) |11111111|11111111|11110011|1 [25] 1ffffe7 [25] | (138) |11111111|11111111|11111100|110 [27] 7ffffe6 [27] | |||
(139) |11111111|11111111|11110100|0 [25] 1ffffe8 [25] | (139) |11111111|11111111|11111100|111 [27] 7ffffe7 [27] | |||
(140) |11111111|11111111|11110100|1 [25] 1ffffe9 [25] | (140) |11111111|11111111|11111101|000 [27] 7ffffe8 [27] | |||
(141) |11111111|11111111|11110101|0 [25] 1ffffea [25] | (141) |11111111|11111111|11111101|001 [27] 7ffffe9 [27] | |||
(142) |11111111|11111111|11110101|1 [25] 1ffffeb [25] | (142) |11111111|11111111|11111101|010 [27] 7ffffea [27] | |||
(143) |11111111|11111111|11110110|0 [25] 1ffffec [25] | (143) |11111111|11111111|11111101|011 [27] 7ffffeb [27] | |||
(144) |11111111|11111111|11110110|1 [25] 1ffffed [25] | (144) |11111111|11111111|11111101|100 [27] 7ffffec [27] | |||
(145) |11111111|11111111|11110111|0 [25] 1ffffee [25] | (145) |11111111|11111111|11111101|101 [27] 7ffffed [27] | |||
(146) |11111111|11111111|11110111|1 [25] 1ffffef [25] | (146) |11111111|11111111|11111101|110 [27] 7ffffee [27] | |||
(147) |11111111|11111111|11111000|0 [25] 1fffff0 [25] | (147) |11111111|11111111|11111101|111 [27] 7ffffef [27] | |||
(148) |11111111|11111111|11111000|1 [25] 1fffff1 [25] | (148) |11111111|11111111|11111110|000 [27] 7fffff0 [27] | |||
(149) |11111111|11111111|11111001|0 [25] 1fffff2 [25] | (149) |11111111|11111111|11111110|001 [27] 7fffff1 [27] | |||
(150) |11111111|11111111|11111001|1 [25] 1fffff3 [25] | (150) |11111111|11111111|11111110|010 [27] 7fffff2 [27] | |||
(151) |11111111|11111111|11111010|0 [25] 1fffff4 [25] | (151) |11111111|11111111|11111110|011 [27] 7fffff3 [27] | |||
(152) |11111111|11111111|11111010|1 [25] 1fffff5 [25] | (152) |11111111|11111111|11111110|100 [27] 7fffff4 [27] | |||
(153) |11111111|11111111|11111011|0 [25] 1fffff6 [25] | (153) |11111111|11111111|11111110|101 [27] 7fffff5 [27] | |||
(154) |11111111|11111111|11111011|1 [25] 1fffff7 [25] | (154) |11111111|11111111|11111110|110 [27] 7fffff6 [27] | |||
(155) |11111111|11111111|11111100|0 [25] 1fffff8 [25] | (155) |11111111|11111111|11111110|111 [27] 7fffff7 [27] | |||
(156) |11111111|11111111|11111100|1 [25] 1fffff9 [25] | (156) |11111111|11111111|11111111|000 [27] 7fffff8 [27] | |||
(157) |11111111|11111111|11111101|0 [25] 1fffffa [25] | (157) |11111111|11111111|11111111|001 [27] 7fffff9 [27] | |||
(158) |11111111|11111111|11111101|1 [25] 1fffffb [25] | (158) |11111111|11111111|11111111|010 [27] 7fffffa [27] | |||
(159) |11111111|11111111|11111110|0 [25] 1fffffc [25] | (159) |11111111|11111111|11111111|011 [27] 7fffffb [27] | |||
(160) |11111111|11111111|11111110|1 [25] 1fffffd [25] | (160) |11111111|11111111|11111111|100 [27] 7fffffc [27] | |||
(161) |11111111|11111111|11111111|0 [25] 1fffffe [25] | (161) |11111111|11111111|11111111|101 [27] 7fffffd [27] | |||
(162) |11111111|11111111|11111111|1 [25] 1ffffff [25] | (162) |11111111|11111111|11111111|110 [27] 7fffffe [27] | |||
(163) |11111111|11111111|10000000| [24] ffff80 [24] | (163) |11111111|11111111|11111111|111 [27] 7ffffff [27] | |||
(164) |11111111|11111111|10000001| [24] ffff81 [24] | (164) |11111111|11111111|11100000|00 [26] 3ffff80 [26] | |||
(165) |11111111|11111111|10000010| [24] ffff82 [24] | (165) |11111111|11111111|11100000|01 [26] 3ffff81 [26] | |||
(166) |11111111|11111111|10000011| [24] ffff83 [24] | (166) |11111111|11111111|11100000|10 [26] 3ffff82 [26] | |||
(167) |11111111|11111111|10000100| [24] ffff84 [24] | (167) |11111111|11111111|11100000|11 [26] 3ffff83 [26] | |||
(168) |11111111|11111111|10000101| [24] ffff85 [24] | (168) |11111111|11111111|11100001|00 [26] 3ffff84 [26] | |||
(169) |11111111|11111111|10000110| [24] ffff86 [24] | (169) |11111111|11111111|11100001|01 [26] 3ffff85 [26] | |||
(170) |11111111|11111111|10000111| [24] ffff87 [24] | (170) |11111111|11111111|11100001|10 [26] 3ffff86 [26] | |||
(171) |11111111|11111111|10001000| [24] ffff88 [24] | (171) |11111111|11111111|11100001|11 [26] 3ffff87 [26] | |||
(172) |11111111|11111111|10001001| [24] ffff89 [24] | (172) |11111111|11111111|11100010|00 [26] 3ffff88 [26] | |||
(173) |11111111|11111111|10001010| [24] ffff8a [24] | (173) |11111111|11111111|11100010|01 [26] 3ffff89 [26] | |||
(174) |11111111|11111111|10001011| [24] ffff8b [24] | (174) |11111111|11111111|11100010|10 [26] 3ffff8a [26] | |||
(175) |11111111|11111111|10001100| [24] ffff8c [24] | (175) |11111111|11111111|11100010|11 [26] 3ffff8b [26] | |||
(176) |11111111|11111111|10001101| [24] ffff8d [24] | (176) |11111111|11111111|11100011|00 [26] 3ffff8c [26] | |||
(177) |11111111|11111111|10001110| [24] ffff8e [24] | (177) |11111111|11111111|11100011|01 [26] 3ffff8d [26] | |||
(178) |11111111|11111111|10001111| [24] ffff8f [24] | (178) |11111111|11111111|11100011|10 [26] 3ffff8e [26] | |||
(179) |11111111|11111111|10010000| [24] ffff90 [24] | (179) |11111111|11111111|11100011|11 [26] 3ffff8f [26] | |||
(180) |11111111|11111111|10010001| [24] ffff91 [24] | (180) |11111111|11111111|11100100|00 [26] 3ffff90 [26] | |||
(181) |11111111|11111111|10010010| [24] ffff92 [24] | (181) |11111111|11111111|11100100|01 [26] 3ffff91 [26] | |||
(182) |11111111|11111111|10010011| [24] ffff93 [24] | (182) |11111111|11111111|11100100|10 [26] 3ffff92 [26] | |||
(183) |11111111|11111111|10010100| [24] ffff94 [24] | (183) |11111111|11111111|11100100|11 [26] 3ffff93 [26] | |||
(184) |11111111|11111111|10010101| [24] ffff95 [24] | (184) |11111111|11111111|11100101|00 [26] 3ffff94 [26] | |||
(185) |11111111|11111111|10010110| [24] ffff96 [24] | (185) |11111111|11111111|11100101|01 [26] 3ffff95 [26] | |||
(186) |11111111|11111111|10010111| [24] ffff97 [24] | (186) |11111111|11111111|11100101|10 [26] 3ffff96 [26] | |||
(187) |11111111|11111111|10011000| [24] ffff98 [24] | (187) |11111111|11111111|11100101|11 [26] 3ffff97 [26] | |||
(188) |11111111|11111111|10011001| [24] ffff99 [24] | (188) |11111111|11111111|11100110|00 [26] 3ffff98 [26] | |||
(189) |11111111|11111111|10011010| [24] ffff9a [24] | (189) |11111111|11111111|11100110|01 [26] 3ffff99 [26] | |||
(190) |11111111|11111111|10011011| [24] ffff9b [24] | (190) |11111111|11111111|11100110|10 [26] 3ffff9a [26] | |||
(191) |11111111|11111111|10011100| [24] ffff9c [24] | (191) |11111111|11111111|11100110|11 [26] 3ffff9b [26] | |||
(192) |11111111|11111111|10011101| [24] ffff9d [24] | (192) |11111111|11111111|11100111|00 [26] 3ffff9c [26] | |||
(193) |11111111|11111111|10011110| [24] ffff9e [24] | (193) |11111111|11111111|11100111|01 [26] 3ffff9d [26] | |||
(194) |11111111|11111111|10011111| [24] ffff9f [24] | (194) |11111111|11111111|11100111|10 [26] 3ffff9e [26] | |||
(195) |11111111|11111111|10100000| [24] ffffa0 [24] | (195) |11111111|11111111|11100111|11 [26] 3ffff9f [26] | |||
(196) |11111111|11111111|10100001| [24] ffffa1 [24] | (196) |11111111|11111111|11101000|00 [26] 3ffffa0 [26] | |||
(197) |11111111|11111111|10100010| [24] ffffa2 [24] | (197) |11111111|11111111|11101000|01 [26] 3ffffa1 [26] | |||
(198) |11111111|11111111|10100011| [24] ffffa3 [24] | (198) |11111111|11111111|11101000|10 [26] 3ffffa2 [26] | |||
(199) |11111111|11111111|10100100| [24] ffffa4 [24] | (199) |11111111|11111111|11101000|11 [26] 3ffffa3 [26] | |||
(200) |11111111|11111111|10100101| [24] ffffa5 [24] | (200) |11111111|11111111|11101001|00 [26] 3ffffa4 [26] | |||
(201) |11111111|11111111|10100110| [24] ffffa6 [24] | (201) |11111111|11111111|11101001|01 [26] 3ffffa5 [26] | |||
(202) |11111111|11111111|10100111| [24] ffffa7 [24] | (202) |11111111|11111111|11101001|10 [26] 3ffffa6 [26] | |||
(203) |11111111|11111111|10101000| [24] ffffa8 [24] | (203) |11111111|11111111|11101001|11 [26] 3ffffa7 [26] | |||
(204) |11111111|11111111|10101001| [24] ffffa9 [24] | (204) |11111111|11111111|11101010|00 [26] 3ffffa8 [26] | |||
(205) |11111111|11111111|10101010| [24] ffffaa [24] | (205) |11111111|11111111|11101010|01 [26] 3ffffa9 [26] | |||
(206) |11111111|11111111|10101011| [24] ffffab [24] | (206) |11111111|11111111|11101010|10 [26] 3ffffaa [26] | |||
(207) |11111111|11111111|10101100| [24] ffffac [24] | (207) |11111111|11111111|11101010|11 [26] 3ffffab [26] | |||
(208) |11111111|11111111|10101101| [24] ffffad [24] | (208) |11111111|11111111|11101011|00 [26] 3ffffac [26] | |||
(209) |11111111|11111111|10101110| [24] ffffae [24] | (209) |11111111|11111111|11101011|01 [26] 3ffffad [26] | |||
(210) |11111111|11111111|10101111| [24] ffffaf [24] | (210) |11111111|11111111|11101011|10 [26] 3ffffae [26] | |||
(211) |11111111|11111111|10110000| [24] ffffb0 [24] | (211) |11111111|11111111|11101011|11 [26] 3ffffaf [26] | |||
(212) |11111111|11111111|10110001| [24] ffffb1 [24] | (212) |11111111|11111111|11101100|00 [26] 3ffffb0 [26] | |||
(213) |11111111|11111111|10110010| [24] ffffb2 [24] | (213) |11111111|11111111|11101100|01 [26] 3ffffb1 [26] | |||
(214) |11111111|11111111|10110011| [24] ffffb3 [24] | (214) |11111111|11111111|11101100|10 [26] 3ffffb2 [26] | |||
(215) |11111111|11111111|10110100| [24] ffffb4 [24] | (215) |11111111|11111111|11101100|11 [26] 3ffffb3 [26] | |||
(216) |11111111|11111111|10110101| [24] ffffb5 [24] | (216) |11111111|11111111|11101101|00 [26] 3ffffb4 [26] | |||
(217) |11111111|11111111|10110110| [24] ffffb6 [24] | (217) |11111111|11111111|11101101|01 [26] 3ffffb5 [26] | |||
(218) |11111111|11111111|10110111| [24] ffffb7 [24] | (218) |11111111|11111111|11101101|10 [26] 3ffffb6 [26] | |||
(219) |11111111|11111111|10111000| [24] ffffb8 [24] | (219) |11111111|11111111|11101101|11 [26] 3ffffb7 [26] | |||
(220) |11111111|11111111|10111001| [24] ffffb9 [24] | (220) |11111111|11111111|11101110|00 [26] 3ffffb8 [26] | |||
(221) |11111111|11111111|10111010| [24] ffffba [24] | (221) |11111111|11111111|11101110|01 [26] 3ffffb9 [26] | |||
(222) |11111111|11111111|10111011| [24] ffffbb [24] | (222) |11111111|11111111|11101110|10 [26] 3ffffba [26] | |||
(223) |11111111|11111111|10111100| [24] ffffbc [24] | (223) |11111111|11111111|11101110|11 [26] 3ffffbb [26] | |||
(224) |11111111|11111111|10111101| [24] ffffbd [24] | (224) |11111111|11111111|11101111|00 [26] 3ffffbc [26] | |||
(225) |11111111|11111111|10111110| [24] ffffbe [24] | (225) |11111111|11111111|11101111|01 [26] 3ffffbd [26] | |||
(226) |11111111|11111111|10111111| [24] ffffbf [24] | (226) |11111111|11111111|11101111|10 [26] 3ffffbe [26] | |||
(227) |11111111|11111111|11000000| [24] ffffc0 [24] | (227) |11111111|11111111|11101111|11 [26] 3ffffbf [26] | |||
(228) |11111111|11111111|11000001| [24] ffffc1 [24] | (228) |11111111|11111111|11110000|00 [26] 3ffffc0 [26] | |||
(229) |11111111|11111111|11000010| [24] ffffc2 [24] | (229) |11111111|11111111|11110000|01 [26] 3ffffc1 [26] | |||
(230) |11111111|11111111|11000011| [24] ffffc3 [24] | (230) |11111111|11111111|11110000|10 [26] 3ffffc2 [26] | |||
(231) |11111111|11111111|11000100| [24] ffffc4 [24] | (231) |11111111|11111111|11110000|11 [26] 3ffffc3 [26] | |||
(232) |11111111|11111111|11000101| [24] ffffc5 [24] | (232) |11111111|11111111|11110001|00 [26] 3ffffc4 [26] | |||
(233) |11111111|11111111|11000110| [24] ffffc6 [24] | (233) |11111111|11111111|11110001|01 [26] 3ffffc5 [26] | |||
(234) |11111111|11111111|11000111| [24] ffffc7 [24] | (234) |11111111|11111111|11110001|10 [26] 3ffffc6 [26] | |||
(235) |11111111|11111111|11001000| [24] ffffc8 [24] | (235) |11111111|11111111|11110001|11 [26] 3ffffc7 [26] | |||
(236) |11111111|11111111|11001001| [24] ffffc9 [24] | (236) |11111111|11111111|11110010|00 [26] 3ffffc8 [26] | |||
(237) |11111111|11111111|11001010| [24] ffffca [24] | (237) |11111111|11111111|11110010|01 [26] 3ffffc9 [26] | |||
(238) |11111111|11111111|11001011| [24] ffffcb [24] | (238) |11111111|11111111|11110010|10 [26] 3ffffca [26] | |||
(239) |11111111|11111111|11001100| [24] ffffcc [24] | (239) |11111111|11111111|11110010|11 [26] 3ffffcb [26] | |||
(240) |11111111|11111111|11001101| [24] ffffcd [24] | (240) |11111111|11111111|11110011|00 [26] 3ffffcc [26] | |||
(241) |11111111|11111111|11001110| [24] ffffce [24] | (241) |11111111|11111111|11110011|01 [26] 3ffffcd [26] | |||
(242) |11111111|11111111|11001111| [24] ffffcf [24] | (242) |11111111|11111111|11110011|10 [26] 3ffffce [26] | |||
(243) |11111111|11111111|11010000| [24] ffffd0 [24] | (243) |11111111|11111111|11110011|11 [26] 3ffffcf [26] | |||
(244) |11111111|11111111|11010001| [24] ffffd1 [24] | (244) |11111111|11111111|11110100|00 [26] 3ffffd0 [26] | |||
(245) |11111111|11111111|11010010| [24] ffffd2 [24] | (245) |11111111|11111111|11110100|01 [26] 3ffffd1 [26] | |||
(246) |11111111|11111111|11010011| [24] ffffd3 [24] | (246) |11111111|11111111|11110100|10 [26] 3ffffd2 [26] | |||
(247) |11111111|11111111|11010100| [24] ffffd4 [24] | (247) |11111111|11111111|11110100|11 [26] 3ffffd3 [26] | |||
(248) |11111111|11111111|11010101| [24] ffffd5 [24] | (248) |11111111|11111111|11110101|00 [26] 3ffffd4 [26] | |||
(249) |11111111|11111111|11010110| [24] ffffd6 [24] | (249) |11111111|11111111|11110101|01 [26] 3ffffd5 [26] | |||
(250) |11111111|11111111|11010111| [24] ffffd7 [24] | (250) |11111111|11111111|11110101|10 [26] 3ffffd6 [26] | |||
(251) |11111111|11111111|11011000| [24] ffffd8 [24] | (251) |11111111|11111111|11110101|11 [26] 3ffffd7 [26] | |||
(252) |11111111|11111111|11011001| [24] ffffd9 [24] | (252) |11111111|11111111|11110110|00 [26] 3ffffd8 [26] | |||
(253) |11111111|11111111|11011010| [24] ffffda [24] | (253) |11111111|11111111|11110110|01 [26] 3ffffd9 [26] | |||
(254) |11111111|11111111|11011011| [24] ffffdb [24] | (254) |11111111|11111111|11110110|10 [26] 3ffffda [26] | |||
(255) |11111111|11111111|11011100| [24] ffffdc [24] | (255) |11111111|11111111|11110110|11 [26] 3ffffdb [26] | |||
EOS (256) |11111111|11111111|11011101| [24] ffffdd [24] | EOS (256) |11111111|11111111|11110111|00 [26] 3ffffdc [26] | |||
Appendix E. Examples | Appendix D. Examples | |||
A number of examples are worked through here, for both requests and | A number of examples are worked through here, for both requests and | |||
responses, and with and without Huffman coding. | responses, and with and without Huffman coding. | |||
E.1. Header Field Representation Examples | D.1. Header Field Representation Examples | |||
This section show several independent representation examples. | This section show several independent representation examples. | |||
E.1.1. Literal Header Field with Indexing | D.1.1. Literal Header Field with Indexing | |||
The header field representation uses a literal name and a literal | The header field representation uses a literal name and a literal | |||
value. | value. | |||
Header set to encode: | Header set to encode: | |||
custom-key: custom-header | custom-key: custom-header | |||
Reference set: empty. | Reference set: empty. | |||
skipping to change at page 35, line 35 | skipping to change at page 30, line 44 | |||
Header Table (after decoding): | Header Table (after decoding): | |||
[ 1] (s = 55) custom-key: custom-header | [ 1] (s = 55) custom-key: custom-header | |||
Table size: 55 | Table size: 55 | |||
Decoded header set: | Decoded header set: | |||
custom-key: custom-header | custom-key: custom-header | |||
E.1.2. Literal Header Field without Indexing | D.1.2. Literal Header Field without Indexing | |||
The header field representation uses an indexed name and a literal | The header field representation uses an indexed name and a literal | |||
value. | value. | |||
Header set to encode: | Header set to encode: | |||
:path: /sample/path | :path: /sample/path | |||
Reference set: empty. | Reference set: empty. | |||
skipping to change at page 36, line 19 | skipping to change at page 31, line 30 | |||
0c | Literal value (len = 12) | 0c | Literal value (len = 12) | |||
2f73 616d 706c 652f 7061 7468 | /sample/path | 2f73 616d 706c 652f 7061 7468 | /sample/path | |||
| -> :path: /sample/path | | -> :path: /sample/path | |||
Header table (after decoding): empty. | Header table (after decoding): empty. | |||
Decoded header set: | Decoded header set: | |||
:path: /sample/path | :path: /sample/path | |||
E.1.3. Indexed Header Field | D.1.3. Indexed Header Field | |||
The header field representation uses an indexed header field, from | The header field representation uses an indexed header field, from | |||
the static table. Upon using it, the static table entry is copied | the static table. Upon using it, the static table entry is copied | |||
into the header table. | into the header table. | |||
Header set to encode: | Header set to encode: | |||
:method: GET | :method: GET | |||
Reference set: empty. | Reference set: empty. | |||
skipping to change at page 37, line 5 | skipping to change at page 32, line 20 | |||
Header Table (after decoding): | Header Table (after decoding): | |||
[ 1] (s = 42) :method: GET | [ 1] (s = 42) :method: GET | |||
Table size: 42 | Table size: 42 | |||
Decoded header set: | Decoded header set: | |||
:method: GET | :method: GET | |||
E.1.4. Indexed Header Field from Static Table | D.1.4. Indexed Header Field from Static Table | |||
The header field representation uses an indexed header field, from | The header field representation uses an indexed header field, from | |||
the static table. In this example, the SETTINGS_HEADER_TABLE_SIZE is | the static table. In this example, the SETTINGS_HEADER_TABLE_SIZE is | |||
set to 0, therefore, the entry is not copied into the header table. | set to 0, therefore, the entry is not copied into the header table. | |||
Header set to encode: | Header set to encode: | |||
:method: GET | :method: GET | |||
Reference set: empty. | Reference set: empty. | |||
skipping to change at page 37, line 33 | skipping to change at page 33, line 9 | |||
82 | == Indexed - Add == | 82 | == Indexed - Add == | |||
| idx = 2 | | idx = 2 | |||
| -> :method: GET | | -> :method: GET | |||
Header table (after decoding): empty. | Header table (after decoding): empty. | |||
Decoded header set: | Decoded header set: | |||
:method: GET | :method: GET | |||
E.2. Request Examples without Huffman | D.2. Request Examples without Huffman | |||
This section shows several consecutive header sets, corresponding to | This section shows several consecutive header sets, corresponding to | |||
HTTP requests, on the same connection. | HTTP requests, on the same connection. | |||
E.2.1. First request | D.2.1. First request | |||
Header set to encode: | Header set to encode: | |||
:method: GET | :method: GET | |||
:scheme: http | :scheme: http | |||
:path: / | :path: / | |||
:authority: www.example.com | :authority: www.example.com | |||
Reference set: empty. | Reference set: empty. | |||
skipping to change at page 38, line 44 | skipping to change at page 34, line 20 | |||
[ 4] (s = 42) :method: GET | [ 4] (s = 42) :method: GET | |||
Table size: 180 | Table size: 180 | |||
Decoded header set: | Decoded header set: | |||
:method: GET | :method: GET | |||
:scheme: http | :scheme: http | |||
:path: / | :path: / | |||
:authority: www.example.com | :authority: www.example.com | |||
E.2.2. Second request | D.2.2. Second request | |||
This request takes advantage of the differential encoding of header | This request takes advantage of the differential encoding of header | |||
sets. | sets. | |||
Header set to encode: | Header set to encode: | |||
:method: GET | :method: GET | |||
:scheme: http | :scheme: http | |||
:path: / | :path: / | |||
:authority: www.example.com | :authority: www.example.com | |||
skipping to change at page 40, line 5 | skipping to change at page 35, line 29 | |||
Table size: 233 | Table size: 233 | |||
Decoded header set: | Decoded header set: | |||
cache-control: no-cache | cache-control: no-cache | |||
:authority: www.example.com | :authority: www.example.com | |||
:path: / | :path: / | |||
:scheme: http | :scheme: http | |||
:method: GET | :method: GET | |||
E.2.3. Third request | D.2.3. Third request | |||
This request has not enough headers in common with the previous | This request has not enough headers in common with the previous | |||
request to take advantage of the differential encoding. Therefore, | request to take advantage of the differential encoding. Therefore, | |||
the reference set is emptied before encoding the header fields. | the reference set is emptied before encoding the header fields. | |||
Header set to encode: | Header set to encode: | |||
:method: GET | :method: GET | |||
:scheme: https | :scheme: https | |||
:path: /index.html | :path: /index.html | |||
skipping to change at page 40, line 29 | skipping to change at page 36, line 13 | |||
Reference set: | Reference set: | |||
[ 1] cache-control: no-cache | [ 1] cache-control: no-cache | |||
[ 2] :authority: www.example.com | [ 2] :authority: www.example.com | |||
[ 3] :path: / | [ 3] :path: / | |||
[ 4] :scheme: http | [ 4] :scheme: http | |||
[ 5] :method: GET | [ 5] :method: GET | |||
Hex dump of encoded data: | Hex dump of encoded data: | |||
8085 8c8b 8400 0a63 7573 746f 6d2d 6b65 | .......custom-ke | 8080 858c 8b84 000a 6375 7374 6f6d 2d6b | ........custom-k | |||
790c 6375 7374 6f6d 2d76 616c 7565 | y.custom-value | 6579 0c63 7573 746f 6d2d 7661 6c75 65 | ey.custom-value | |||
Decoding process: | Decoding process: | |||
80 | == Empty reference set == | 80 80 | == Empty reference set == | |||
| idx = 0 | | idx = 0 | |||
| flag = 1 | ||||
85 | == Indexed - Add == | 85 | == Indexed - Add == | |||
| idx = 5 | | idx = 5 | |||
| -> :method: GET | | -> :method: GET | |||
8c | == Indexed - Add == | 8c | == Indexed - Add == | |||
| idx = 12 | | idx = 12 | |||
| -> :scheme: https | | -> :scheme: https | |||
8b | == Indexed - Add == | 8b | == Indexed - Add == | |||
| idx = 11 | | idx = 11 | |||
| -> :path: /index.html | | -> :path: /index.html | |||
84 | == Indexed - Add == | 84 | == Indexed - Add == | |||
skipping to change at page 42, line 5 | skipping to change at page 37, line 23 | |||
Table size: 379 | Table size: 379 | |||
Decoded header set: | Decoded header set: | |||
:method: GET | :method: GET | |||
:scheme: https | :scheme: https | |||
:path: /index.html | :path: /index.html | |||
:authority: www.example.com | :authority: www.example.com | |||
custom-key: custom-value | custom-key: custom-value | |||
E.3. Request Examples with Huffman | D.3. Request Examples with Huffman | |||
This section shows the same examples as the previous section, but | This section shows the same examples as the previous section, but | |||
using Huffman encoding for the literal values. | using Huffman encoding for the literal values. | |||
E.3.1. First request | D.3.1. First request | |||
Header set to encode: | Header set to encode: | |||
:method: GET | :method: GET | |||
:scheme: http | :scheme: http | |||
:path: / | :path: / | |||
:authority: www.example.com | :authority: www.example.com | |||
Reference set: empty. | Reference set: empty. | |||
skipping to change at page 43, line 20 | skipping to change at page 38, line 40 | |||
[ 4] (s = 42) :method: GET | [ 4] (s = 42) :method: GET | |||
Table size: 180 | Table size: 180 | |||
Decoded header set: | Decoded header set: | |||
:method: GET | :method: GET | |||
:scheme: http | :scheme: http | |||
:path: / | :path: / | |||
:authority: www.example.com | :authority: www.example.com | |||
E.3.2. Second request | D.3.2. Second request | |||
This request takes advantage of the differential encoding of header | This request takes advantage of the differential encoding of header | |||
sets. | sets. | |||
Header set to encode: | Header set to encode: | |||
:method: GET | :method: GET | |||
:scheme: http | :scheme: http | |||
:path: / | :path: / | |||
:authority: www.example.com | :authority: www.example.com | |||
skipping to change at page 44, line 34 | skipping to change at page 40, line 11 | |||
Table size: 233 | Table size: 233 | |||
Decoded header set: | Decoded header set: | |||
cache-control: no-cache | cache-control: no-cache | |||
:authority: www.example.com | :authority: www.example.com | |||
:path: / | :path: / | |||
:scheme: http | :scheme: http | |||
:method: GET | :method: GET | |||
E.3.3. Third request | D.3.3. Third request | |||
This request has not enough headers in common with the previous | This request has not enough headers in common with the previous | |||
request to take advantage of the differential encoding. Therefore, | request to take advantage of the differential encoding. Therefore, | |||
the reference set is emptied before encoding the header fields. | the reference set is emptied before encoding the header fields. | |||
Header set to encode: | Header set to encode: | |||
:method: GET | :method: GET | |||
:scheme: https | :scheme: https | |||
:path: /index.html | :path: /index.html | |||
skipping to change at page 45, line 14 | skipping to change at page 40, line 35 | |||
Reference set: | Reference set: | |||
[ 1] cache-control: no-cache | [ 1] cache-control: no-cache | |||
[ 2] :authority: www.example.com | [ 2] :authority: www.example.com | |||
[ 3] :path: / | [ 3] :path: / | |||
[ 4] :scheme: http | [ 4] :scheme: http | |||
[ 5] :method: GET | [ 5] :method: GET | |||
Hex dump of encoded data: | Hex dump of encoded data: | |||
8085 8c8b 8400 884e b08b 7497 90fa 7f89 | .......N..t..... | 8080 858c 8b84 0088 4eb0 8b74 9790 fa7f | ........N..t.... | |||
4eb0 8b74 979a 17a8 ff | N..t..... | 894e b08b 7497 9a17 a8ff | .N..t..... | |||
Decoding process: | Decoding process: | |||
80 | == Empty reference set == | 80 80 | == Empty reference set == | |||
| idx = 0 | | idx = 0 | |||
| flag = 1 | ||||
85 | == Indexed - Add == | 85 | == Indexed - Add == | |||
| idx = 5 | | idx = 5 | |||
| -> :method: GET | | -> :method: GET | |||
8c | == Indexed - Add == | 8c | == Indexed - Add == | |||
| idx = 12 | | idx = 12 | |||
| -> :scheme: https | | -> :scheme: https | |||
8b | == Indexed - Add == | 8b | == Indexed - Add == | |||
| idx = 11 | | idx = 11 | |||
| -> :path: /index.html | | -> :path: /index.html | |||
84 | == Indexed - Add == | 84 | == Indexed - Add == | |||
skipping to change at page 46, line 25 | skipping to change at page 42, line 11 | |||
Table size: 379 | Table size: 379 | |||
Decoded header set: | Decoded header set: | |||
:method: GET | :method: GET | |||
:scheme: https | :scheme: https | |||
:path: /index.html | :path: /index.html | |||
:authority: www.example.com | :authority: www.example.com | |||
custom-key: custom-value | custom-key: custom-value | |||
E.4. Response Examples without Huffman | D.4. Response Examples without Huffman | |||
This section shows several consecutive header sets, corresponding to | This section shows several consecutive header sets, corresponding to | |||
HTTP responses, on the same connection. SETTINGS_HEADER_TABLE_SIZE | HTTP responses, on the same connection. SETTINGS_HEADER_TABLE_SIZE | |||
is set to the value of 256 octets, causing some evictions to occur. | is set to the value of 256 octets, causing some evictions to occur. | |||
E.4.1. First response | D.4.1. First response | |||
Header set to encode: | Header set to encode: | |||
:status: 302 | :status: 302 | |||
cache-control: private | cache-control: private | |||
date: Mon, 21 Oct 2013 20:13:21 GMT | date: Mon, 21 Oct 2013 20:13:21 GMT | |||
location: https://www.example.com | location: https://www.example.com | |||
Reference set: empty. | Reference set: empty. | |||
skipping to change at page 48, line 5 | skipping to change at page 44, line 5 | |||
[ 4] (s = 42) :status: 302 | [ 4] (s = 42) :status: 302 | |||
Table size: 222 | Table size: 222 | |||
Decoded header set: | Decoded header set: | |||
:status: 302 | :status: 302 | |||
cache-control: private | cache-control: private | |||
date: Mon, 21 Oct 2013 20:13:21 GMT | date: Mon, 21 Oct 2013 20:13:21 GMT | |||
location: https://www.example.com | location: https://www.example.com | |||
E.4.2. Second response | D.4.2. Second response | |||
The (":status", "302") header field is evicted from the header table | The (":status", "302") header field is evicted from the header table | |||
to free space to allow adding the (":status", "200") header field to | to free space to allow adding the (":status", "200") header field, | |||
be copied from the static table into the header table. | copied from the static table into the header table. The (":status", | |||
"302") header field doesn't need to be removed from the reference set | ||||
as it is evicted from the header table. | ||||
Header set to encode: | Header set to encode: | |||
:status: 200 | :status: 200 | |||
cache-control: private | cache-control: private | |||
date: Mon, 21 Oct 2013 20:13:21 GMT | date: Mon, 21 Oct 2013 20:13:21 GMT | |||
location: https://www.example.com | location: https://www.example.com | |||
Reference set: | Reference set: | |||
[ 1] location: https://www.example.com | [ 1] location: https://www.example.com | |||
[ 2] date: Mon, 21 Oct 2013 20:13:21 GMT | [ 2] date: Mon, 21 Oct 2013 20:13:21 GMT | |||
[ 3] cache-control: private | [ 3] cache-control: private | |||
[ 4] :status: 302 | [ 4] :status: 302 | |||
Hex dump of encoded data: | Hex dump of encoded data: | |||
848c | .. | 8c | . | |||
Decoding process: | Decoding process: | |||
84 | == Indexed - Remove == | ||||
| idx = 4 | ||||
| -> :status: 302 | ||||
8c | == Indexed - Add == | 8c | == Indexed - Add == | |||
| idx = 12 | | idx = 12 | |||
| - evict: :status: 302 | | - evict: :status: 302 | |||
| -> :status: 200 | | -> :status: 200 | |||
Header Table (after decoding): | Header Table (after decoding): | |||
[ 1] (s = 42) :status: 200 | [ 1] (s = 42) :status: 200 | |||
[ 2] (s = 63) location: https://www.example.com | [ 2] (s = 63) location: https://www.example.com | |||
[ 3] (s = 65) date: Mon, 21 Oct 2013 20:13:21 GMT | [ 3] (s = 65) date: Mon, 21 Oct 2013 20:13:21 GMT | |||
[ 4] (s = 52) cache-control: private | [ 4] (s = 52) cache-control: private | |||
Table size: 222 | Table size: 222 | |||
Decoded header set: | Decoded header set: | |||
:status: 200 | :status: 200 | |||
location: https://www.example.com | location: https://www.example.com | |||
date: Mon, 21 Oct 2013 20:13:21 GMT | date: Mon, 21 Oct 2013 20:13:21 GMT | |||
cache-control: private | cache-control: private | |||
E.4.3. Third response | D.4.3. Third response | |||
Several header fields are evicted from the header table during the | Several header fields are evicted from the header table during the | |||
processing of this header set. Before evicting a header belonging to | processing of this header set. Before evicting a header belonging to | |||
the reference set, it is emitted, by coding it twice as an Indexed | the reference set, it is emitted, by coding it twice as an Indexed | |||
Representation. The first representation removes the header field | Representation. The first representation removes the header field | |||
from the reference set, the second one adds it again to the reference | from the reference set, the second one adds it again to the reference | |||
set, also emitting it. | set, also emitting it. | |||
Header set to encode: | Header set to encode: | |||
skipping to change at page 49, line 39 | skipping to change at page 45, line 37 | |||
Reference set: | Reference set: | |||
[ 1] :status: 200 | [ 1] :status: 200 | |||
[ 2] location: https://www.example.com | [ 2] location: https://www.example.com | |||
[ 3] date: Mon, 21 Oct 2013 20:13:21 GMT | [ 3] date: Mon, 21 Oct 2013 20:13:21 GMT | |||
[ 4] cache-control: private | [ 4] cache-control: private | |||
Hex dump of encoded data: | Hex dump of encoded data: | |||
8384 8403 1d4d 6f6e 2c20 3231 204f 6374 | .....Mon, 21 Oct | 8484 031d 4d6f 6e2c 2032 3120 4f63 7420 | ....Mon, 21 Oct | |||
2032 3031 3320 3230 3a31 333a 3232 2047 | 2013 20:13:22 G | 3230 3133 2032 303a 3133 3a32 3220 474d | 2013 20:13:22 GM | |||
4d54 1d04 677a 6970 8484 8383 3a38 666f | MT..gzip....:8fo | 541d 0467 7a69 7084 8483 833a 3866 6f6f | T..gzip....:8foo | |||
6f3d 4153 444a 4b48 514b 425a 584f 5157 | o=ASDJKHQKBZXOQW | 3d41 5344 4a4b 4851 4b42 5a58 4f51 5745 | =ASDJKHQKBZXOQWE | |||
454f 5049 5541 5851 5745 4f49 553b 206d | EOPIUAXQWEOIU; m | 4f50 4955 4158 5157 454f 4955 3b20 6d61 | OPIUAXQWEOIU; ma | |||
6178 2d61 6765 3d33 3630 303b 2076 6572 | ax-age=3600; ver | 782d 6167 653d 3336 3030 3b20 7665 7273 | x-age=3600; vers | |||
7369 6f6e 3d31 | sion=1 | 696f 6e3d 31 | ion=1 | |||
Decoding process: | Decoding process: | |||
83 | == Indexed - Remove == | ||||
| idx = 3 | ||||
| -> date: Mon, 21 Oct 2013 \ | ||||
| 20:13:21 GMT | ||||
84 | == Indexed - Remove == | 84 | == Indexed - Remove == | |||
| idx = 4 | | idx = 4 | |||
| -> cache-control: private | | -> cache-control: private | |||
84 | == Indexed - Add == | 84 | == Indexed - Add == | |||
| idx = 4 | | idx = 4 | |||
| -> cache-control: private | | -> cache-control: private | |||
03 | == Literal indexed == | 03 | == Literal indexed == | |||
| Indexed name (idx = 3) | | Indexed name (idx = 3) | |||
| date | | date | |||
1d | Literal value (len = 29) | 1d | Literal value (len = 29) | |||
skipping to change at page 51, line 26 | skipping to change at page 47, line 24 | |||
Decoded header set: | Decoded header set: | |||
cache-control: private | cache-control: private | |||
date: Mon, 21 Oct 2013 20:13:22 GMT | date: Mon, 21 Oct 2013 20:13:22 GMT | |||
content-encoding: gzip | content-encoding: gzip | |||
location: https://www.example.com | location: https://www.example.com | |||
:status: 200 | :status: 200 | |||
set-cookie: foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1 | set-cookie: foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1 | |||
E.5. Response Examples with Huffman | D.5. Response Examples with Huffman | |||
This section shows the same examples as the previous section, but | This section shows the same examples as the previous section, but | |||
using Huffman encoding for the literal values. The eviction | using Huffman encoding for the literal values. The eviction | |||
mechanism uses the length of the decoded literal values, so the same | mechanism uses the length of the decoded literal values, so the same | |||
evictions occurs as in the previous section. | evictions occurs as in the previous section. | |||
E.5.1. First response | D.5.1. First response | |||
Header set to encode: | Header set to encode: | |||
:status: 302 | :status: 302 | |||
cache-control: private | cache-control: private | |||
date: Mon, 21 Oct 2013 20:13:21 GMT | date: Mon, 21 Oct 2013 20:13:21 GMT | |||
location: https://www.example.com | location: https://www.example.com | |||
Reference set: empty. | Reference set: empty. | |||
Hex dump of encoded data: | Hex dump of encoded data: | |||
0882 409f 1886 c31b 39bf 387f 2292 a2fb | ..@.....9.8."... | 0882 98a7 1885 73d5 cd11 1f22 98ef 6b3a | ......s...."..k: | |||
a203 20f2 ab30 3124 018b 490d 3209 e877 | .. ..01$..I.2..w | 7a0e 6e8f a263 d072 9a6e 8397 d869 bd87 | z.n..c.r.n...i.. | |||
3093 e39e 7864 dd7a fd3d 3d24 8747 db87 | 0...xd.z.==$.G.. | 3747 bbbf c730 90ce 3174 3d80 1b6d b107 | 7G...0..1t=..m.. | |||
2849 55f6 ff | (IU.. | cd1a 3962 44b7 4f | ..9bD.O | |||
Decoding process: | Decoding process: | |||
08 | == Literal indexed == | 08 | == Literal indexed == | |||
| Indexed name (idx = 8) | | Indexed name (idx = 8) | |||
| :status | | :status | |||
82 | Literal value (len = 3) | 82 | Literal value (len = 3) | |||
| Huffman encoded: | | Huffman encoded: | |||
409f | @. | 98a7 | .. | |||
| Decoded: | | Decoded: | |||
| 302 | | 302 | |||
| -> :status: 302 | | -> :status: 302 | |||
18 | == Literal indexed == | 18 | == Literal indexed == | |||
| Indexed name (idx = 24) | | Indexed name (idx = 24) | |||
| cache-control | | cache-control | |||
86 | Literal value (len = 7) | 85 | Literal value (len = 7) | |||
| Huffman encoded: | | Huffman encoded: | |||
c31b 39bf 387f | ..9.8. | 73d5 cd11 1f | s.... | |||
| Decoded: | | Decoded: | |||
| private | | private | |||
| -> cache-control: private | | -> cache-control: private | |||
22 | == Literal indexed == | 22 | == Literal indexed == | |||
| Indexed name (idx = 34) | | Indexed name (idx = 34) | |||
| date | | date | |||
92 | Literal value (len = 29) | 98 | Literal value (len = 29) | |||
| Huffman encoded: | | Huffman encoded: | |||
a2fb a203 20f2 ab30 3124 018b 490d 3209 | .... ..01$..I.2. | ef6b 3a7a 0e6e 8fa2 63d0 729a 6e83 97d8 | .k:z.n..c.r.n... | |||
e877 | .w | 69bd 8737 47bb bfc7 | i..7G... | |||
| Decoded: | | Decoded: | |||
| Mon, 21 Oct 2013 20:13:21 \ | | Mon, 21 Oct 2013 20:13:21 \ | |||
| GMT | | GMT | |||
| -> date: Mon, 21 Oct 2013 \ | | -> date: Mon, 21 Oct 2013 \ | |||
| 20:13:21 GMT | | 20:13:21 GMT | |||
30 | == Literal indexed == | 30 | == Literal indexed == | |||
| Indexed name (idx = 48) | | Indexed name (idx = 48) | |||
| location | | location | |||
93 | Literal value (len = 23) | 90 | Literal value (len = 23) | |||
| Huffman encoded: | | Huffman encoded: | |||
e39e 7864 dd7a fd3d 3d24 8747 db87 2849 | ..xd.z.==$.G..(I | ce31 743d 801b 6db1 07cd 1a39 6244 b74f | .1t=..m....9bD.O | |||
55f6 ff | U.. | ||||
| Decoded: | | Decoded: | |||
| https://www.example.com | | https://www.example.com | |||
| -> location: https://www.e\ | | -> location: https://www.e\ | |||
| xample.com | | xample.com | |||
Header Table (after decoding): | Header Table (after decoding): | |||
[ 1] (s = 63) location: https://www.example.com | [ 1] (s = 63) location: https://www.example.com | |||
[ 2] (s = 65) date: Mon, 21 Oct 2013 20:13:21 GMT | [ 2] (s = 65) date: Mon, 21 Oct 2013 20:13:21 GMT | |||
[ 3] (s = 52) cache-control: private | [ 3] (s = 52) cache-control: private | |||
[ 4] (s = 42) :status: 302 | [ 4] (s = 42) :status: 302 | |||
Table size: 222 | Table size: 222 | |||
Decoded header set: | Decoded header set: | |||
:status: 302 | :status: 302 | |||
cache-control: private | cache-control: private | |||
date: Mon, 21 Oct 2013 20:13:21 GMT | date: Mon, 21 Oct 2013 20:13:21 GMT | |||
location: https://www.example.com | location: https://www.example.com | |||
E.5.2. Second response | D.5.2. Second response | |||
The (":status", "302") header field is evicted from the header table | The (":status", "302") header field is evicted from the header table | |||
to free space to allow adding the (":status", "200") header field to | to free space to allow adding the (":status", "200") header field, | |||
be copied from the static table into the header table. | copied from the static table into the header table. The (":status", | |||
"302") header field doesn't need to be removed from the reference set | ||||
as it is evicted from the header table. | ||||
Header set to encode: | Header set to encode: | |||
:status: 200 | :status: 200 | |||
cache-control: private | cache-control: private | |||
date: Mon, 21 Oct 2013 20:13:21 GMT | date: Mon, 21 Oct 2013 20:13:21 GMT | |||
location: https://www.example.com | location: https://www.example.com | |||
Reference set: | Reference set: | |||
[ 1] location: https://www.example.com | [ 1] location: https://www.example.com | |||
[ 2] date: Mon, 21 Oct 2013 20:13:21 GMT | [ 2] date: Mon, 21 Oct 2013 20:13:21 GMT | |||
[ 3] cache-control: private | [ 3] cache-control: private | |||
[ 4] :status: 302 | [ 4] :status: 302 | |||
Hex dump of encoded data: | Hex dump of encoded data: | |||
848c | .. | 8c | . | |||
Decoding process: | Decoding process: | |||
84 | == Indexed - Remove == | ||||
| idx = 4 | ||||
| -> :status: 302 | ||||
8c | == Indexed - Add == | 8c | == Indexed - Add == | |||
| idx = 12 | | idx = 12 | |||
| - evict: :status: 302 | | - evict: :status: 302 | |||
| -> :status: 200 | | -> :status: 200 | |||
Header Table (after decoding): | Header Table (after decoding): | |||
[ 1] (s = 42) :status: 200 | [ 1] (s = 42) :status: 200 | |||
[ 2] (s = 63) location: https://www.example.com | [ 2] (s = 63) location: https://www.example.com | |||
[ 3] (s = 65) date: Mon, 21 Oct 2013 20:13:21 GMT | [ 3] (s = 65) date: Mon, 21 Oct 2013 20:13:21 GMT | |||
[ 4] (s = 52) cache-control: private | [ 4] (s = 52) cache-control: private | |||
Table size: 222 | Table size: 222 | |||
Decoded header set: | Decoded header set: | |||
:status: 200 | :status: 200 | |||
location: https://www.example.com | location: https://www.example.com | |||
date: Mon, 21 Oct 2013 20:13:21 GMT | date: Mon, 21 Oct 2013 20:13:21 GMT | |||
cache-control: private | cache-control: private | |||
E.5.3. Third response | D.5.3. Third response | |||
Several header fields are evicted from the header table during the | Several header fields are evicted from the header table during the | |||
processing of this header set. Before evicting a header belonging to | processing of this header set. Before evicting a header belonging to | |||
the reference set, it is emitted, by coding it twice as an Indexed | the reference set, it is emitted, by coding it twice as an Indexed | |||
Representation. The first representation removes the header field | Representation. The first representation removes the header field | |||
from the reference set, the second one adds it again to the reference | from the reference set, the second one adds it again to the reference | |||
set, also emitting it. | set, also emitting it. | |||
Header set to encode: | Header set to encode: | |||
skipping to change at page 55, line 13 | skipping to change at page 52, line 13 | |||
set-cookie: foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1 | set-cookie: foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1 | |||
Reference set: | Reference set: | |||
[ 1] :status: 200 | [ 1] :status: 200 | |||
[ 2] location: https://www.example.com | [ 2] location: https://www.example.com | |||
[ 3] date: Mon, 21 Oct 2013 20:13:21 GMT | [ 3] date: Mon, 21 Oct 2013 20:13:21 GMT | |||
[ 4] cache-control: private | [ 4] cache-control: private | |||
Hex dump of encoded data: | Hex dump of encoded data: | |||
8384 8403 92a2 fba2 0320 f2ab 3031 2401 | ......... ..01$. | 8484 0398 ef6b 3a7a 0e6e 8fa2 63d0 729a | .....k:z.n..c.r. | |||
8b49 0d33 09e8 771d 84e1 fbb3 0f84 8483 | .I.3..w......... | 6e83 97d8 69bd 873f 47bb bfc7 1d83 cbd5 | n...i..?G....... | |||
833a b3df 7dfb 36d3 d9e1 fcfc 3faf e7ab | .:..}.6.....?... | 4e84 8483 833a b3c5 adb7 7f87 6fc7 fbf7 | N....:......o... | |||
fcfe fcbf af3e df2f 977f d36f f7fd 79f6 | ......./...o..y. | fdbf bebf f3f7 f4fb 7ebb be9f 5f87 e37f | ............_... | |||
f977 fd3d e16b fa46 fe10 d889 447d e1ce | .w.=.k.F....D}.. | efed faee fa7c 3f1d 5d1a 23ce 5464 36cd | .....|?.].#.Td6. | |||
18e5 65f7 6c2f | ..e.l/ | 494b d5d1 cc5f 0535 969b | IK..._.5.. | |||
Decoding process: | Decoding process: | |||
83 | == Indexed - Remove == | ||||
| idx = 3 | ||||
| -> date: Mon, 21 Oct 2013 \ | ||||
| 20:13:21 GMT | ||||
84 | == Indexed - Remove == | 84 | == Indexed - Remove == | |||
| idx = 4 | | idx = 4 | |||
| -> cache-control: private | | -> cache-control: private | |||
84 | == Indexed - Add == | 84 | == Indexed - Add == | |||
| idx = 4 | | idx = 4 | |||
| -> cache-control: private | | -> cache-control: private | |||
03 | == Literal indexed == | 03 | == Literal indexed == | |||
| Indexed name (idx = 3) | | Indexed name (idx = 3) | |||
| date | | date | |||
92 | Literal value (len = 29) | 98 | Literal value (len = 29) | |||
| Huffman encoded: | | Huffman encoded: | |||
a2fb a203 20f2 ab30 3124 018b 490d 3309 | .... ..01$..I.3. | ef6b 3a7a 0e6e 8fa2 63d0 729a 6e83 97d8 | .k:z.n..c.r.n... | |||
e877 | .w | 69bd 873f 47bb bfc7 | i..?G... | |||
| Decoded: | | Decoded: | |||
| Mon, 21 Oct 2013 20:13:22 \ | | Mon, 21 Oct 2013 20:13:22 \ | |||
| GMT | | GMT | |||
| - evict: cache-control: pr\ | | - evict: cache-control: pr\ | |||
| ivate | | ivate | |||
| -> date: Mon, 21 Oct 2013 \ | | -> date: Mon, 21 Oct 2013 \ | |||
| 20:13:22 GMT | | 20:13:22 GMT | |||
1d | == Literal indexed == | 1d | == Literal indexed == | |||
| Indexed name (idx = 29) | | Indexed name (idx = 29) | |||
| content-encoding | | content-encoding | |||
84 | Literal value (len = 4) | 83 | Literal value (len = 4) | |||
| Huffman encoded: | | Huffman encoded: | |||
e1fb b30f | .... | cbd5 4e | ..N | |||
| Decoded: | | Decoded: | |||
| gzip | | gzip | |||
| - evict: date: Mon, 21 Oct\ | | - evict: date: Mon, 21 Oct\ | |||
| 2013 20:13:21 GMT | | 2013 20:13:21 GMT | |||
| -> content-encoding: gzip | | -> content-encoding: gzip | |||
84 | == Indexed - Remove == | 84 | == Indexed - Remove == | |||
| idx = 4 | | idx = 4 | |||
| -> location: https://www.e\ | | -> location: https://www.e\ | |||
| xample.com | | xample.com | |||
84 | == Indexed - Add == | 84 | == Indexed - Add == | |||
skipping to change at page 56, line 29 | skipping to change at page 53, line 26 | |||
| idx = 3 | | idx = 3 | |||
| -> :status: 200 | | -> :status: 200 | |||
83 | == Indexed - Add == | 83 | == Indexed - Add == | |||
| idx = 3 | | idx = 3 | |||
| -> :status: 200 | | -> :status: 200 | |||
3a | == Literal indexed == | 3a | == Literal indexed == | |||
| Indexed name (idx = 58) | | Indexed name (idx = 58) | |||
| set-cookie | | set-cookie | |||
b3 | Literal value (len = 56) | b3 | Literal value (len = 56) | |||
| Huffman encoded: | | Huffman encoded: | |||
df7d fb36 d3d9 e1fc fc3f afe7 abfc fefc | .}.6.....?...... | c5ad b77f 876f c7fb f7fd bfbe bff3 f7f4 | .....o.......... | |||
bfaf 3edf 2f97 7fd3 6ff7 fd79 f6f9 77fd | ..../...o..y..w. | fb7e bbbe 9f5f 87e3 7fef edfa eefa 7c3f | ....._........|? | |||
3de1 6bfa 46fe 10d8 8944 7de1 ce18 e565 | =.k.F....D}....e | 1d5d 1a23 ce54 6436 cd49 4bd5 d1cc 5f05 | .].#.Td6.IK..._. | |||
f76c 2f | .l/ | 3596 9b | 5.. | |||
| Decoded: | | Decoded: | |||
| foo=ASDJKHQKBZXOQWEOPIUAXQ\ | | foo=ASDJKHQKBZXOQWEOPIUAXQ\ | |||
| WEOIU; max-age=3600; versi\ | | WEOIU; max-age=3600; versi\ | |||
| on=1 | | on=1 | |||
| - evict: location: https:/\ | | - evict: location: https:/\ | |||
| /www.example.com | | /www.example.com | |||
| - evict: :status: 200 | | - evict: :status: 200 | |||
| -> set-cookie: foo=ASDJKHQ\ | | -> set-cookie: foo=ASDJKHQ\ | |||
| KBZXOQWEOPIUAXQWEOIU; ma\ | | KBZXOQWEOPIUAXQWEOIU; ma\ | |||
| x-age=3600; version=1 | | x-age=3600; version=1 | |||
End of changes. 139 change blocks. | ||||
869 lines changed or deleted | 657 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |