- From: Martin Thomson <martin.thomson@gmail.com>
- Date: Fri, 4 Aug 2017 11:36:09 +1000
- To: Jana Iyengar <jri@google.com>
- Cc: Mike Bishop <Michael.Bishop@microsoft.com>, QUIC WG <quic@ietf.org>, "ietf-http-wg@w3.org" <ietf-http-wg@w3.org>
- Message-ID: <CABkgnnUBJhj2ajzcAM07heG+h6e6nS0VnB0NDm8qvEUkYx7-vQ@mail.gmail.com>
On 4 August 2017 at 10:31, Jana Iyengar <jri@google.com> wrote: > I think the high-order idea is great, and I'm totally in favor. I've > raised several editorial issues, but there's one substantitive one that may > be worth discussing here. > > PUSH_PROMISE is sent by the server, and CANCEL_PUSH may be sent by the > server. The text currently says that CANCEL_PUSH on a non-existent Push ID > results in error, which does not work with the possibility of reordering > between PUSH_PROMISE and CANCEL_PUSH. > That's just a bug. > Similarly, it's also possible for the PUSH_PROMISE to not have been > received because the stream on which it was sent was reset... basically > it's possible for a client to receive a CANCEL_PUSH without seeing the > corresponding PUSH_PROMISE. > This is more interesting. It creates state on the client: it says that clients are required to ignore pushes that it *might* receive in the future. That suggests a different fix, akin to what we use for other similar pieces of state: 1. make Push ID sequential (right now the only requirement is for connection-wide uniqueness) 2. have the client advertise a MAX_PUSH_ID (in SETTINGS, and with a new frame type; the setting might {ab|re}use ENABLE_PUSH) This would bound state for clients. A client couldn't receive an arbitrary number of CANCEL_PUSH messages that are distributed over the 32-bit Push ID space, so tracking cancellations is easy. Clients could use a simple bitvector to track which pushes are potentially interesting, clearing bits as pushes or cancellations arrive. MAX_PUSH_ID would give clients a finer-grained lever to control push. We could have CANCEL_PUSH be sent on the same streams as the PUSH_PROMISE, > but that doesn't help with the case where the PUSH_PROMISE may not have > been received due to a stream reset. > > This makes me wonder if it makes sense to always send the PUSH_PROMISE on > the control stream *in addition to* any stream that it is sent on. This > would ensure that no matter what, the PUSH_PROMISE is always received, and > additionally ensures that CANCEL_PUSH is received after a PUSH_PROMISE. > I don't think that is a good idea. PUSH_PROMISE includes a headers block, which is pretty big, even with effective compression. HoLB won't affect this stream, so size shouldn't be an issue, but still. I did consider moving the header block to the control stream completely as part of addressing the issue with duplication that I mentioned earlier. The basic problem there is that you don't guarantee that the client see the PUSH_PROMISE before it processes the response content. > > - jana > > On Thu, Aug 3, 2017 at 5:49 PM, Mike Bishop <Michael.Bishop@microsoft.com> > wrote: > >> Bah, QUIC too. 😊 >> >> >> >> *From:* Mike Bishop [mailto:Michael.Bishop@microsoft.com] >> *Sent:* Thursday, August 3, 2017 10:36 AM >> *To:* ietf-http-wg@w3.org >> *Subject:* Push ID - Merge Imminent >> >> >> >> This is Martin’s Push ID PR split off from unidirectional. Given that it >> has already been picked over in those contexts and the feedback from that >> and in-person discussion was to bring this change in separately, I’m about >> ready to merge this. Everything anyone has quibbled with has been >> editorial. However, I don’t see reviews from many folks, so I want to make >> sure that everyone interested has had a chance to express an opinion. >> >> >> >> https://github.com/quicwg/base-drafts/pull/701 >> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fquicwg%2Fbase-drafts%2Fpull%2F701&data=04%7C01%7CMichael.Bishop%40microsoft.com%7C8c68a743428c43fd9e9508d4da9692a7%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636373787673436338%7CUnknown%7CVW5rbm93bnx7IlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiT3RoZXIifQ%3D%3D%7C-1&sdata=lF5Cr5Fe1RuY5BOvPgiy9iaGqHS27%2B7jeM1IOipSxu4%3D&reserved=0> >> >> >> >> I’ll give it a few hours (until everyone’s had at least a little bit of a >> work day), then merge unless I hear otherwise. >> > >
Received on Friday, 4 August 2017 01:36:32 UTC