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:11:27 -0800
Cc: "ietf-http-wg@w3.org" <ietf-http-wg@w3.org>
Message-Id: <CEAE58E5-3369-46F2-97B6-63931D4186F5@mnot.net>
To: Hans Spaak <hans.spaak@ericsson.com>
Hi Hans,

As you’ve seen, complexity of header compression is a shared concern; in our latest drafts, we’ve been significantly simplifying HPACK.

Do you have any running code to share?

Regards,


On 6 Nov 2013, at 1: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

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

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