- From: Jana Iyengar <jri@google.com>
- Date: Fri, 4 Aug 2017 17:55:26 -0700
- To: Ian Swett <ianswett@google.com>
- Cc: Kazuho Oku <kazuhooku@gmail.com>, Martin Thomson <martin.thomson@gmail.com>, QUIC WG <quic@ietf.org>, "ietf-http-wg@w3.org" <ietf-http-wg@w3.org>, Mike Bishop <Michael.Bishop@microsoft.com>
- Message-ID: <CAGD1bZbG4osJrdk20ASsbO+TfthmNKyALVWSXB1cC7W35JMcyA@mail.gmail.com>
Martin, I think the idea of sequential Push ID is a good one. You have to specify a MAX_PUSH_ID, without which the client won't know how far out to expect CANCEL_PUSHes can be... this also requires then a MAX_PUSH_ID_UPDATE message which can be used to move the MAX up. One note: > 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. >>> >> I don't think so. The spec allows it, and I can easily see it happen in practice. - jana > >>> >>>> 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) >>> >> >> I think that using a sequential ID will be a good idea not only for >> fixing this issue but that it might be possible to use the sequentiality to >> fix the first issue raised in the PR (i.e. client knowing "when the server >> will stop referencing a push ID in PUSH_PROMISE"). >> >> If there is a sequential ordering guarantee for Push ID, a client can, by >> looking at the Push ID, determine whether if it has already consumed the >> pushed request. If it has, it will immediately lookup its cache, and in >> case it fails to find a cached object, then issue a pull. If it has not >> consumed the pushed request, it should wait for the pushed response to >> arrive. >> >> >> >>> >>> 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. >>>>> >>>> >>>> >>> >> >> >> -- >> Kazuho Oku >> > >
Received on Saturday, 5 August 2017 00:55:57 UTC