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

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

Received on Thursday, 4 July 2013 14:36:21 UTC