W3C home > Mailing lists > Public > ietf-http-wg@w3.org > October to December 2013

Re: Suggestion for simplified HTTP 2.0 header compression algorithm

From: Mark Nottingham <mnot@mnot.net>
Date: Wed, 6 Nov 2013 09:16:39 -0800
Cc: Michael Sweet <msweet@apple.com>, Hans Spaak <hans.spaak@ericsson.com>, "ietf-http-wg@w3.org" <ietf-http-wg@w3.org>, Salvatore Loreto <salvatore.loreto@ericsson.com>, Robert Skog <robert.skog@ericsson.com>, Thorsten Herber <thorsten.herber@ericsson.com>
Message-Id: <90CA359B-1401-4BE4-AFBB-E266E810D747@mnot.net>
To: James M Snell <jasnell@gmail.com>
Hi James,

On 6 Nov 2013, at 5:54 am, James M Snell <jasnell@gmail.com> wrote:

> Throughout this process I've gone through several iterations of a
> decidedly less complicated header encoding mechanism [1] and have
> consistently come up against the point of view that achieving the best
> possible compression ratio appears to be the single most important
> deciding factor.

Iím surprised to hear you say that. In all of the discussions Iíve been a part of, the emphasis has been on balancing compression efficiency and complexity, with a bias towards simplicity (and a constraint of security). Pretty much everyone acknowledges that HPACK is more complex than weíd like, but we donít yet have an alternate proposal thatís gathered more interest.

The concerns Iíve heard about BOHE are that it requires knowledge of individual headers when sending, and that it adds complexity. We havenít yet ruled it out; the issue you raised is still open, but the approach so far has been to see how well delta coding works before considering adding other techniques or replacing it.

Weíre just getting starting to get that experience with HPACK.

> Whenever I have raised concerns about the level of
> complexity, I've been told that the tooling will handle it so it's not
> a problem.

Who told you that? I havenít heard that point of view expressed at all.

> 
> [1] http://tools.ietf.org/html/draft-snell-httpbis-bohe-13
> 
> My personal opinion is that achieving the best possible compression
> ratio should not be the sole deciding factor and that the currently
> proposed mechanism is far into the "trying to be way too clever" range
> and introduces far too much unjustified additional complexity. In
> other words, I'm very -1 on it but, thus far, I appear to be in the
> minority. (and yes, FWIW, I have taken the time to implement the
> current scheme so I'm not just speaking out of some theoretical
> concern).
> 
> - James
> 
> 
> 
> On Wed, Nov 6, 2013 at 5:02 AM, Michael Sweet <msweet@apple.com> wrote:
>> Hans,
>> 
>> I am all for simplifying the current header compression algorithm, which is
>> growing needlessly complicated IMHO as people try to achieve ever greater
>> compression ratios without regard to implementation complexity or
>> interoperability concerns.
>> 
>> That said, I donít like the idea of putting headers in the settings frame
>> since it doesnít play well with proxies - clients need to be able to direct
>> requests to multiple origin servers and proxies need to be able to
>> consolidate multiple client connections onto a single connection to the
>> origin server.  (it will be hard enough for the current header compression
>> scheme to work for that, but at least it is possible)
>> 
>> 
>> On Nov 6, 2013, at 4:04 AM, Hans Spaak <hans.spaak@ericsson.com> wrote:
>> 
>> Hello,
>> 
>> 
>> 
>> The proposed header compression algorithm is rather complicated and we
>> foresee that  there will be at least initially a lot of interworking
>> problems
>> when different compressor and de-compressor implementations need to work
>> together.
>> We experienced those problems when the equally complicated WAP1.x header
>> compression was implemented.
>> 
>> 
>> 
>> Here is our proposal for simplifying how headers are compressed in HTTP/2.0.
>> 
>> It does not compress as hard as the currently proposed solution (if the
>> encoder is written in a very smart way),
>> 
>> but it is much easier to implement.
>> 
>> 
>> 
>> Please have a look at it and comment.
>> 
>> 
>> 
>> Exchange of static headers, which are the same for one TCP connection:
>> 
>> 
>> 
>> The SETTINGS frame is used to transmit the static request and response
>> headers.
>> 
>> The HEADERS frame is used to transmit the dynamic request and response
>> headers.
>> 
>> Static headers and dynamic headers are combined in the following way:
>> 
>> 1.       Emit the dynamic headers.
>> 
>> 2.       Emit the static headers whose header names are not present in the
>> dynamic headers.
>> 
>> 
>> 
>>                         Client                        Server
>> 
>>                           |                             |
>> 
>>                           |SETTINGS                     |
>>                           | - static request headers    |
>>                           |   (:method, :host,          |
>> 
>>                           |    User-Agent, Accept, Ö)   |
>> 
>>                           |---------------------------->| Store static
>> request
>>                           |                             | headers for
>> connection
>> 
>>                           |SETTINGS                     |
>> 
>>                           | - static response headers   |
>> 
>>                           |   (:status 200, Server, Ö)  |
>> 
>>                           |                             |
>> 
>>     Store static response |<----------------------------|
>> 
>>    headers for connection |                             |
>> 
>>                           |HEADERS                      |
>> 
>>                           | - dynamic request headers   |
>> 
>>                           |   (:path, Ö)                |
>> 
>>                           |---------------------------->| Combine static
>> and
>> 
>>                           |                             | dynamic request
>> 
>>                           |                             | headers.
>>                           |                             | Dynamic headers
>> have
>> 
>>                           |                             | precedence over
>> static
>> 
>>                           |                             | headers.
>> 
>>                           |HEADERS                      |
>> 
>>                           | - dynamic response headers  |
>> 
>>                           |   (Content-Type, Age, Ö)    |
>> 
>>        Combine static and |<----------------------------|
>> 
>> dynamic response headers. |                             |
>>      Dynamic headers have |                             |
>> 
>>    precedence over static |                             |
>> 
>>                  headers. |                             |
>> 
>> 
>> 
>> Coding of header names and values:
>> 
>> 
>> 
>> Standard headers are coded in the following way:
>> 
>>  0   1   2   3   4   5   6   7
>> 
>> +---+---+---+---+---+---+---+---+
>> 
>> | 1 | Index of standard header  |
>> 
>> +---+---------------------------+
>> 
>> |  Value length (8+)            |
>> 
>> +-------------------------------+
>> 
>> | Value String (Length octets)  |
>> 
>> +-------------------------------+
>> 
>> 
>> 
>> 
>> 
>> Non-standard headers are coded in the following way:
>> 
>>  0   1   2   3   4   5   6   7
>> 
>> +---+---+---+---+---+---+---+---+
>> 
>> | 0 | Name Length (7+)          |
>> 
>> +---+---------------------------+
>> 
>> | Name String (Length octets)   |
>> 
>> +-------------------------------+
>> 
>> | Value length (8+)             |
>> 
>> +-------------------------------+
>> 
>> | Value String (Length octets)  |
>> 
>> +-------------------------------+
>> 
>> 
>> 
>> Indices for standard headers (example only):
>> 
>> 
>> 
>> 0 :scheme
>> 
>> 1 :host
>> 
>> 2 :path
>> 
>> 3 :method
>> 
>> 4 :status
>> 
>> 5 accept
>> 
>> 6 accept-charset
>> 
>> 7 accept-encoding
>> 
>> 8 accept-language
>> 
>> 9 age
>> 
>> 10 cache-control
>> 
>> 11 content-length
>> 
>> Ö
>> 
>> 
>> 
>> Br,
>> 
>> 
>> 
>> Hans Spaak
>> 
>> Ericsson AB
>> 
>> E-mail: hans.spaak@ericsson.com
>> 
>> Web: www.ericsson.com
>> 
>> 
>> 
>> 
>> 
>> 
>> _______________________________________________________________
>> Michael Sweet, Senior Printing System Engineer, PWG Chair
>> 
> 

--
Mark Nottingham   http://www.mnot.net/
Received on Wednesday, 6 November 2013 17:17:07 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 1 March 2016 11:11:19 UTC