Subject: One comment on draft-ietf-httpbis-header-compression-00

From: Michael Sweet <[email-masked]>
Date: Thu, 04 Jul 2013 10:35:50 -0400

All,

Just a couple comments on draft-ietf-httpbis-header-compression-00:

- Appendix B provides useful examples showing headers and values, but the 4.x subsections don't actually show the name or the value in the little encoding figures. As I read through I completely missed the one sentence at the end of each that indicated that the value is added on the end, and that doesn't indicate the number of bits, etc. used to encode it.  I suggest updating each figure to include all of the data that appears, for example 4.4.3 would turn into two figures (or two subsections - I don't know which would be clearer):

      0   1   2   3   4   5   6   7
    +---+---+---+---+---+---+---+---+
    | 0 | 0 |      Index (6+)       |
    +---+---+-----------------------+
    | 0 | Substitute Index (7+)     |
    +---+---------------------------+
    | 0 | Value Length (7+)         |
    +---+---------------------------+
    | Value String (Length octets)  |
    +-------------------------------+

      0   1   2   3   4   5   6   7
    +---+---+---+---+---+---+---+---+
    | 0 | 0 |           0           |
    +---+---+-----------------------+
    | 0 | Name Length (7+)          |
    +---+---------------------------+
    | Name String (Length octets)   |
    +---+---------------------------+
    | 0 | Substitute Index (7+)     |
    +---+---------------------------+
    | 0 | Value Length (7+)         |
    +---+---------------------------+
    | Value String (Length octets)  |
    +-------------------------------+

- It wasn't completely clear until I got to the examples on how a client would send headers in a request or how a server would send headers in the response. The overview is focused on the header table and encoder/decoder but doesn't actually talk about the HTTP client or server - a quick high-level example (a "pseudo-encoding"?) might be useful here to give the context for the encoder and how it is used, and in fact a simple example of a series of GET requests for a web page would illustrate the redundancy of headers, e.g.:

    HTTP/1.1 Client                      HTTP/1.1 Server

    GET / HTTP/1.1
    Host: www.example.com
    User-Agent: my-user-agent
    Accept-Language: en, fr

                                         HTTP/1.1 200 OK
                                         Date: Thu, 4 Jul 2013 15:35:00 GMT
                                         Server: my-server
                                         Connection: Keep-Alive
                                         Keep-Alive: timeout=30
                                         Content-Type: text/html; charset=utf-8
                                         Content-Length: 1234
                                         Content-Language: en
                                         Last-Modified: Wed, 3 Jul 2013 12:34:56 GMT

                                         ... content ...

    GET /image.jpg HTTP/1.1
    Host: www.example.com
    User-Agent: my-user-agent
    Accept-Language: en, fr

                                         HTTP/1.1 200 OK
                                         Date: Thu, 4 Jul 2013 15:35:01 GMT
                                         Server: my-server
                                         Connection: Keep-Alive
                                         Keep-Alive: timeout=30
                                         Content-Type: image/jpeg
                                         Content-Length: 5678
                                         Content-Language: en
                                         Last-Modified: Tue, 2 Jul 2013 10:20:30 GMT

                                         ... content ...

vs:

    HTTP/2.0 Client                      HTTP/2.0 Server

    :method = get
    :scheme = http
    :host = www.example.com
    :path = /
    user-agent = my-user-agent
    accept-language = en, fr

                                         :status = 200 (or use previous value)
                                         date = Thu, 4 Jul 2013 15:35:00 GMT
                                         server = my-server
                                         content-type: text/html; charset=utf-8
                                         content-length: 1234
                                         content-language: en
                                         last-modified: Wed, 3 Jul 2013 12:34:56 GMT

                                         ... content ...

    :method (use previous value)
    :scheme (use previous value)
    :host (use previous value)
    :path = /image.jpg
    user-agent (use previous value)
    accept-language (use previous value)

                                         :status (use previous value)
                                         date = Thu, 4 Jul 2013 15:35:01 GMT
                                         server (use previous value)
                                         content-type = image/jpeg
                                         content-length = 5678
                                         content-language (use previous value)
                                         last-modified = Tue, 2 Jul 2013 10:20:30 GMT

                                         ... content ...

You could then go on to talk about how the client and server encode and decode the respective headers, with the follow-on examples showing the actual encoding.

_________________________________________________________
Michael Sweet, Senior Printing System Engineer, PWG Chair

---

From: RUELLAN Herve <[email-masked]>
Date: Thu, 4 Jul 2013 16:35:57 +0000

Thank you for your suggestions.

I changed the figures in subsections 4.x as you suggested. This will make it easier to grasp quickly how each representation is encoded.

I'm reluctant to add examples of sending headers in the compression spec as there are already present in the main HTTP/2.0 spec.

Hervé.

> -----Original Message-----
> From: Michael Sweet [mailto:[email-masked]]
> Sent: jeudi 4 juillet 2013 16:36
> To: HTTP Working Group
> Subject: One comment on draft-ietf-httpbis-header-compression-00
> 
> All,
> 
> - Appendix B provides useful examples showing headers and values, but the
> 4.x subsections don't actually show the name or the value in the little
> encoding figures. As I read through I completely missed the one sentence at
> the end of each that indicated that the value is added on the end, and that
> doesn't indicate the number of bits, etc. used to encode it.  I suggest
> updating each figure to include all of the data that appears, for example 4.4.3
> would turn into two figures (or two subsections - I don't know which would
> be clearer):
> 
>       0   1   2   3   4   5   6   7
> - It wasn't completely clear until I got to the examples on how a client would
> send headers in a request or how a server would send headers in the
> response. The overview is focused on the header table and
> encoder/decoder but doesn't actually talk about the HTTP client or server - a
> quick high-level example (a "pseudo-encoding"?) might be useful here to
> give the context for the encoder and how it is used, and in fact a simple
> example of a series of GET requests for a web page would illustrate the
> redundancy of headers, e.g.:
> 
> You could then go on to talk about how the client and server encode and
> decode the respective headers, with the follow-on examples showing the
> actual encoding.
>

---

From: Michael Sweet <[email-masked]>
Date: Thu, 04 Jul 2013 19:34:09 -0400

Hervé,

> I changed the figures in subsections 4.x as you suggested. This will make it easier to grasp quickly how each representation is encoded.

Thanks!

> I'm reluctant to add examples of sending headers in the compression spec as there are already present in the main HTTP/2.0 spec.

Fair enough.