- From: Gábor Molnár <gabor.molnar@sch.bme.hu>
- Date: Tue, 24 Sep 2013 13:23:08 +0200
- To: Mike Bishop <Michael.Bishop@microsoft.com>
- Cc: Fred Akalin <akalin@google.com>, "ietf-http-wg@w3.org" <ietf-http-wg@w3.org>
- Message-id: <CA+KJw_7Zhy40wubRpw7GWc2CH4g_xbbvbNkjny93kXdm8PEydQ@mail.gmail.com>
2013/9/24 Mike Bishop <Michael.Bishop@microsoft.com> > Yes, that’s a reasonable interpretation. While the spec could be > clearer, I think that’s the correct reading. That still leaves open the > question about correct behavior, though. You said “You'll need to take the > appropriate action when an entry in the reference set gets dropped, which > is most likely explicitly emitting it before it gets dropped.” Is this > appropriate action on the part of the compressor, or the decompressor? > > If the compressor, what action is that -- does it need to notice that an > entry it cares about is going to be dropped and immediately encode two > indexed references to it, forcing it to be emitted before it’s dropped? Or > is it an appropriate action on the decompressor’s part, which means the > compressor needs to ensure that nothing in the reference set it wishes to > remove falls off the list before it gets removed? > That is the responsibility of the encoder. I would recommend having a look at Tatsuhiro's encoder algorithm which deals with these corner cases correctly: http://lists.w3.org/Archives/Public/ietf-http-wg/2013JulSep/1135.html > > Sent from Windows Mail > > *From:* Fred Akalin <akalin@google.com> > *Sent:* Monday, September 23, 2013 1:51 PM > *To:* Mike Bishop <Michael.Bishop@microsoft.com> > *Cc:* ietf-http-wg@w3.org > > On Mon, Sep 23, 2013 at 1:37 PM, Mike Bishop < > Michael.Bishop@microsoft.com> wrote: > >> Found a corner case that I’m not sure HPACK handles, or if it does I’m >> not finding it and we might want to clarify…. >> >> Sequence of events: >> >> - Header X is present in reference set and header table. >> - Some other addition to the header table causes header X to be >> dropped. (This could be a header that causes X to be dropped, or a >> substitution operation that replaces X.) >> >> >> - Now the compressor wishes to remove X from the reference set. How >> does it do so? >> >> >> Per 3.2.1, the only operation that has the effect of removing an entry >> from the reference set is an indexed representation of a header already in >> the reference set. But you can’t send the indexed representation of a >> header no longer in the header table. >> > > >From 3.1.3: "A reference set is defined as an unordered set of > references to entries of the header table." I interpret this to mean that > when an entry is removed from the header table, it's removed from the > reference set also. > > >> To address it, we could say: >> >> - *Replacing X with another entry in the header table also replaces >> X in the reference set.* This makes perfect sense, but needs to be >> stated. >> - *Dropping X from the header table also drops it from the reference >> set.* This is more problematic, because the compressor can’t just >> pass over headers it wants to communicate which are already in the >> reference set. Instead, it needs to leave them until the end, then check >> if they’re all still in the reference set. If not, it needs to take >> another action to emit one or more, then check that all the remaining are >> still in the reference set… This loops until the entire remaining set is >> still present. >> >> > You'll need to take the appropriate action when an entry in the > reference set gets dropped, which is most likely explicitly emitting it > before it gets dropped. I ran into this same problem, which Tatsuhiro > Tsujikawa pointed out: see > https://github.com/akalin-chromium/httpbis-header-compression/issues/1 . >
Received on Tuesday, 24 September 2013 11:24:01 UTC