Re: Call for Consensus: Remove "reference set" from HPACK (to address #552)

If there is no reference set, there would be no reason to copy (or pretend
to copy) items from the static table to the dynamic header table.

Then again one could choose to have opcodes for ephemeral actions vs state
changing actions, or change how one emits the reference set by making it
explicit, or make the static table entries negative or put them at the
start of the space instead of the end, or have several reference sets (good
for proxies), or require references to show up before literal opcodes, or
have different opcodes for static table entries, or have opcodes which
modify ranges of entries, or have arrays of opcodes of the same type, or
use 7 bit encoding or fields or use sentinels instead of using length
prefixing or have differing Huffman tables for different directions on
different frames, or encoder lengths differently, or typed fields, or have
different limits for header entry count vs size, etc.

I've tried all of the above, incidentally.

The current design was the winner as it best balanced speed and compression
efficiency.

On 15 July 2014 14:28, Martin Thomson <martin.thomson@gmail.com> wrote:

> The reasons I cited are still relevant considering that most entries
> don't have associated values.
>

Well of course literal fields with index'd names will be copied into the
header table.  That is an entirely different matter than copying an indexed
static field.

To be precise I am concerned with the text in 4.1 that says:

   An _indexed representation_ corresponding to an entry _not present_
   in the reference set entails the following actions:

   o  If referencing an element of the static table:

      *  The header field corresponding to the referenced entry is
         emitted.

      *  The referenced static entry is inserted at the beginning of the
         header table.

      *  A reference to this new header table entry is added to the
         reference set, unless this new entry didn't fit in the header
         table.

I believe that if we do not have a reference set, then this should just
become:

   An _indexed representation_ entails the following actions:

   o  If referencing an element of the static table:

      *  The header field corresponding to the referenced entry is
         emitted.

I just cannot understand why you wish to create an entry in the dynamic
table whenever the static table index is used for something like
:status:200 ?    I only just accepted the reason that it limited the
reference set size to 0 if the header table size was set to 0.  Now there
is no reference set, there is no reason for this.


-- 
Greg Wilkins <gregw@intalio.com>
http://eclipse.org/jetty HTTP, SPDY, Websocket server and client that scales
http://www.webtide.com  advice and support for jetty and cometd.

Received on Tuesday, 15 July 2014 05:34:25 UTC