Internet DRAFT - draft-ruellan-reference-set-definition

draft-ruellan-reference-set-definition







HTTPbis Working Group                                         H. Ruellan
Internet-Draft                                                 Canon CRF
Intended status: Informational                               J. Fujisawa
Expires: January 16, 2014                                    Canon, Inc.
                                                           R. Bellessort
                                                               Y. Fablet
                                                               Canon CRF
                                                           July 15, 2013


               HTTP/2.0: Header Reference Set Definition
               draft-ruellan-reference-set-definition-00

Abstract

   This document describes modifications of the proposed HTTP/2.0 header
   compression mechanism for the definition of the reference set used to
   encode a set of headers.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on January 16, 2014.

Copyright Notice

   Copyright (c) 2013 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of



Ruellan, et al.         Expires January 16, 2014                [Page 1]

Internet-Draft          Reference Set Definition               July 2013


   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Overview  . . . . . . . . . . . . . . . . . . . . . . . . . .   3
     2.1.  Design Principles . . . . . . . . . . . . . . . . . . . .   3
     2.2.  Outline . . . . . . . . . . . . . . . . . . . . . . . . .   3
   3.  Integration Within Current Draft  . . . . . . . . . . . . . .   3
   4.  Detailed Format . . . . . . . . . . . . . . . . . . . . . . .   4
     4.1.  Header Block Organization . . . . . . . . . . . . . . . .   4
     4.2.  Reference Set Definition  . . . . . . . . . . . . . . . .   4
   5.  Empty Reference Set . . . . . . . . . . . . . . . . . . . . .   4
   6.  Open Questions  . . . . . . . . . . . . . . . . . . . . . . .   5
     6.1.  Reference Set Removals  . . . . . . . . . . . . . . . . .   5
     6.2.  Adapted Entries Insertion/Removal . . . . . . . . . . . .   6
     6.3.  Optimized Reference Set Definition  . . . . . . . . . . .   6
     6.4.  Re-indexing of Already Indexed Headers  . . . . . . . . .   6
   7.  Security Considerations . . . . . . . . . . . . . . . . . . .   7
   8.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   7
   9.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   7
     9.1.  Normative References  . . . . . . . . . . . . . . . . . .   7
     9.2.  Informative References  . . . . . . . . . . . . . . . . .   7
   Appendix A.  Example  . . . . . . . . . . . . . . . . . . . . . .   7
     A.1.  Default Reference Set Example . . . . . . . . . . . . . .   8
     A.2.  Empty Reference Set Example . . . . . . . . . . . . . . .   8
     A.3.  Specific Reference Set Example  . . . . . . . . . . . . .   9

1.  Introduction

   In HTTP/2.0 [http2.0], HTTP headers are compressed according to the
   HTTP/2.0 Headers Compression [header-compression] draft.  This
   compression format relies on the previous set of headers to improve
   compression.  Two consecutive sets of headers often comprise a
   significant number of headers in common.  Encoding the differences
   between those two sets is generally more efficient than encoding the
   set of headers itself.

   The messages exchanged between a client and a server (or between a
   server and a client) may however comprise different types of header
   sets: GET requests and POST requests may have more differences than
   similarities; "200 OK" responses and "304 Not Modified" responses may
   be very different.  In those cases, allowing the encoder to select a
   specific reference set of headers allows reducing the size of encoded
   headers.





Ruellan, et al.         Expires January 16, 2014                [Page 2]

Internet-Draft          Reference Set Definition               July 2013


   A new mechanism is proposed in this draft to allow the encoder
   defining a reference set of headers directly from the header indexing
   table.

2.  Overview

2.1.  Design Principles

   This proposal builds on HTTP/2.0 Header Compression
   [header-compression] to further improve the compactness of HTTP
   headers representation.  It reuses the notion of header group as
   defined in Header Delta-Compression for HTTP/2.0 [delta2] in a more
   limited way.  First, NO additional indexing structure or storage
   requirement is added to the existing mechanisms defined in HTTP/2.0
   Header Compression [header-compression].  Second, the impact on
   implementations, particularly on decoder side, should be as limited
   as possible.  This proposal may also bring processing improvements.
   qdfsq

2.2.  Outline

   Using this proposal, when encoding a new set of headers, the encoder
   indicates whether it relies on the default reference set (i.e. the
   previous set of headers) or whether it defines a specific reference
   set.

   A specific reference set is represented as a start index SI and a
   length L; the reference set is defined as the L headers occurring
   from index SI in the header indexing table.

   Once this specific reference set is defined, it is used in place of
   the default reference set to encode the new set of headers: only the
   differences between this specific reference set and the new set of
   headers are represented.

3.  Integration Within Current Draft

   A new flag, REFERENCE_SET, is defined for the HEADERS frame.  This
   flag uses bit 5 (0x10) and determines whether the default reference
   set or another one is used for the given Header Block.

   The value of 0 indicates that the default reference set (i.e.  the
   previous set of headers) is used and the header block contains the
   differences between the reference set and the set of headers
   represented.

   The value of 1 indicates that the header block starts by the
   definition of a specific reference set, which is then followed by the



Ruellan, et al.         Expires January 16, 2014                [Page 3]

Internet-Draft          Reference Set Definition               July 2013


   differences between this specitic reference set and the set of
   headers represented.

4.  Detailed Format

4.1.  Header Block Organization

   A header block is organized in two parts:

   o  An optional reference set definition.  This definition is present
      only if the REFERENCE_SET flag is set.

   o  A list of difference between the reference set and the encoded set
      of headers.  The difference is represented as defined in HTTP/2.0
      Header Compression [header-compression].

4.2.  Reference Set Definition

   A reference set is described on 2 bytes.

     0                                       1
     0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
   +-------------------+-------------------------------------------+
   |    Length (5)     |             Start Index (11)              |
   +-------------------+-------------------------------------------+

                         Reference Set Definition

   The fields defining a reference set are:

   Length:  The length of the reference set, encoded on 5 bits.  This
      length is comprised between 0 and 31.

   Start Index:  The index of the first entry of the reference set in
      the header table.  If the reference set length is strictly greater
      than zero, the start index is encoded on 11 bits.  If the length
      is equal to zero, the start index value is zero and is encoded on
      3 bits.

5.  Empty Reference Set

   If the reference set length is equal to zero, the reference set is
   empty and the reference set definition is optimized to use only one
   byte.

     0   1   2   3   4   5   6   7
   +-------------------+-----------+
   |         0         |     0     |



Ruellan, et al.         Expires January 16, 2014                [Page 4]

Internet-Draft          Reference Set Definition               July 2013


   +-------------------+-----------+

                      Empty Reference Set Definition

   This special case may be useful in a number of applications.  First,
   it can allow a more compact encoding of a header set.  For instance,
   measurements have shown that using the empty as the reference set is,
   for a fair number of test samples, more efficient than using the
   default reference set for HTTP responses.

   Second, using the empty set allows reducing the coding complexity for
   the encoder.  This can be useful for server or intermediaries under a
   heavy load.  It could also be used by lightweight devices that prefer
   using static encoding strategies.

6.  Open Questions

6.1.  Reference Set Removals

   The definition of a specific reference set is based on a contiguous
   set of header entries in the header indexing table.  Removing a
   header from the set is typically encoded using one or two bytes.  It
   may be beneficial to optimize the removal of a header in the case of
   a specific reference set which would be constituted of several
   contiguous sets of headers separated by a few other headers not
   belonging to the set of headers to encode.

   For instance, for a sixteen headers reference set, two bytes are
   needed to define all the removals as an array of booleans.  Two bytes
   is also the cost for encoding one or two removals using HTTP/2.0
   Header Compression [header-compression].  Once a reference set of
   sixteen headers contains more than two headers that should be
   removed, using an array of booleans is more efficient.

   Early experiments show that this approach allows selecting larger
   reference sets and brings noticeable compaction benefits.  Additional
   investigation should be done to understand how optimized indexing
   table building would decrease the benefits.

   Encoding the removals as an array of booleans has also the advantage
   of making decoder implementations simpler.  As removals are not
   encoded in the same way as indexed values, there is no problem of
   handling possible discrepancies between the index values in the
   reference set and the index values in the header table.







Ruellan, et al.         Expires January 16, 2014                [Page 5]

Internet-Draft          Reference Set Definition               July 2013


   Optimized encoding of the header removal could also be envisioned for
   the default reference set.  In such a case, an ordering of the
   default reference set headers should be defined.  Such an ordering
   could be based on the indexes of the headers.

   Additional study should be conducted to evaluate whether this feature
   should be a mandatory part of the specific reference set definition
   or an option.  Several ways to switch on/off this feature may be
   envisioned: using a specific HEADERS frame flag; using a specific bit
   within the reference set definition.  Using a specific HEADERS frame
   flag would be appropriate if using deletions for the default
   reference set is envisioned.

6.2.  Adapted Entries Insertion/Removal

   Rules to handle incremental indexing and batch entry removal in case
   of buffer overflow are defined in HTTP/2.0 Header Compression
   [header-compression].  New rules may be defined when specific
   reference sets are used.

   Incrementally indexed entries could be inserted just after the last
   entry in the header indexing table that is part of the specific
   reference set.  If entry removal is needed, removal could start with
   the first entry after the last incrementally indexed header or just
   after the last entry that is part of the specific reference set.

   Additional study of the processing cost of these rules should be
   envisioned.

6.3.  Optimized Reference Set Definition

   A single representation of the reference header set is currently
   specified.  This representation generally requires 2 bytes to be
   encoded.  Tests involving a single byte representation have been made
   and have shown a small benefit.  Based on additional tests, a more
   optimized representation could be defined.

6.4.  Re-indexing of Already Indexed Headers

   If the same header happens in several reference sets, it may be
   beneficial to insert such header at several places in the header
   indexing table.  While it makes the header indexing table size
   bigger, it may further improve future reference set definitions.

   This approach is already feasible by encoding a header literally
   several times.  It may be optimized by enabling to insert at a new
   place a header that is already represented as an indexed header.




Ruellan, et al.         Expires January 16, 2014                [Page 6]

Internet-Draft          Reference Set Definition               July 2013


7.  Security Considerations

   TBD.

8.  IANA Considerations

   This memo includes no request to IANA.

9.  References

9.1.  Normative References

   [header-compression]
              Ruellan, H. and R. Peon, "HTTP/2.0 Header Compression",
              draft-ietf-httpbis-header-compression-01 (work in
              progress), July 2013.

   [http2.0]  Belshe, M., Peon, R., Thomson, M., Ed., and A. Melnikov,
              Ed., "Hypertext Transfer Protocol version 2.0", draft-
              ietf-httpbis-http2-04 (work in progress), July 2013.

9.2.  Informative References

   [bohe]     Snell, J., "HTTP/2.0 Discussion: Stored Header Encoding",
              draft-snell-httpbis-bohe-11 (work in progress), July 2013.

   [delta2]   Peon, R., "Header Delta-Compression for HTTP/2.0", draft-
              rpeon-httpbis-header-compression-03 (work in progress),
              March 2013.

Appendix A.  Example

   After the transmission of a "200 OK" and "304 Not Modified"
   responses, the header indexing table is as follows:

   +---------+----------------+---------------------------+
   |  Index  | Header Name    | Header Value              |
   +---------+----------------+---------------------------+
   |    0    | :status        | 200                       |
   +---------+----------------+---------------------------+
   |    1    | cache-control  | public                    |
   +---------+----------------+---------------------------+
   |    2    | content-type   | text/html                 |
   +---------+----------------+---------------------------+
   |    3    | content-length | 32                        |
   +---------+----------------+---------------------------+
   |    4    | expires        | 01 Apr 2014 00:00:00 GMT  |
   +---------+----------------+---------------------------+



Ruellan, et al.         Expires January 16, 2014                [Page 7]

Internet-Draft          Reference Set Definition               July 2013


   |    5    | :status        | 304                       |
   +---------+----------------+---------------------------+
   |    6    | expires        | 01 Apr 2015 00:00:00 GMT  |
   +---------+----------------+---------------------------+

                           Initial Header Table

   The current reference set is:

   5    :status: 304
   6    expires: 01 Apr 2015 00:00:00 GMT

                           Initial Header Table

   The next response is a "200 OK" response.  The following headers have
   to be encoded:

   :status: 200
   cache-control: public
   content-type: text/html
   content-length: 1034
   expires: 01 Apr 2016 00:00:00 GMT

                           Initial Header Table

A.1.  Default Reference Set Example

   The following stream illustrates the "200 OK" response header set
   encoded as reference to the previous message:

   0x85    (Indexed header, index = 5, removal)
   0x86    (Indexed header, index = 6, removal)
   0x80    (Indexed header, index = 0)
   0x81    (Indexed header, index = 1)
   0x82    (Indexed header, index = 2)
   0x44    (Literal header with incremental indexing, name index = 3)
   0x04    (Header value string length = 4)
   1034
   0x45    (Literal header with incremental indexing, name index = 4)
   0x18    (Header value string length = 24)
   01 Apr 2016 00:00:00 GMT

                           Initial Header Table

   The size of the encoded header set is 37 bytes.

A.2.  Empty Reference Set Example




Ruellan, et al.         Expires January 16, 2014                [Page 8]

Internet-Draft          Reference Set Definition               July 2013


   The following stream illustrates the "200 OK" response header set
   encoded as reference to an empty reference set:

   0x00    (Empty reference set)
   0x80    (Indexed header, index = 0)
   0x81    (indexed header, index = 1)
   0x82    (indexed header, index = 2)
   0x44    (Literal header with incremental indexing, name index = 3)
   0x04    (Header value string length = 4)
   1034
   0x45    (Literal header with incremental indexing, name index = 4)
   0x18    (Header value string length = 24)
   01 Apr 2016 00:00:00 GMT

                           Initial Header Table

   The size of the encoded header set is 36 bytes.

A.3.  Specific Reference Set Example

   The following stream illustrates the "200 OK" response header set
   encoded as reference to a specific reference set (Length = 3, Start
   Index = 0):

   0x18 0x00 (specific reference set, length = 3, start index = 0)
   0x44    (Literal header with incremental indexing, name index = 3)
   0x04    (Header value string length = 4)
   1034
   0x45    (Literal header with incremental indexing, name index = 4)
   0x18    (Header value string length = 24)
   01 Apr 2016 00:00:00 GMT

                           Initial Header Table

   The size of the encoded header set is 34 bytes.

Authors' Addresses

   Herve Ruellan
   Canon CRF

   EMail: herve.ruellan@crf.canon.fr









Ruellan, et al.         Expires January 16, 2014                [Page 9]

Internet-Draft          Reference Set Definition               July 2013


   Jun Fujisawa
   Canon, Inc.
   3-30-2 Shimomaruko
   Ohta-ku, Tokyo   146-8501
   Japan

   EMail: fujisawa.jun@canon.co.jp


   Romain Bellessort
   Canon CRF

   EMail: romain.bellessort@crf.canon.fr


   Youenn Fablet
   Canon CRF

   EMail: youenn.fablet@crf.canon.fr
































Ruellan, et al.         Expires January 16, 2014               [Page 10]