- From: David Schinazi <dschinazi.ietf@gmail.com>
- Date: Fri, 7 Dec 2018 16:49:34 -0800
- To: mbishop@evequefou.be
- Cc: lucaspardue.24.7@gmail.com, jri.ietf@gmail.com, QUIC <quic@ietf.org>, rch=40google.com@dmarc.ietf.org, fenix@fb.com, ietf-http-wg@w3.org
- Message-ID: <CAPDSy+4F5qVSc4-N9XctuTZgFPhsi_FbquC3zv=hCvXgm-C5UA@mail.gmail.com>
I don't see the proxy case as an issue. Maybe this can be resolved by adding some implementation guidance along the lines of "do not send length 0 unless you are absolutely sure there will be no trailers or other bits after your payload". This is a performance optimization for a widespread use-case of the web today, and no one is required to take advantage of it - if someone is writing a proxy they can simply not use the optimization. David On Fri, Dec 7, 2018 at 4:11 PM Mike Bishop <mbishop@evequefou.be> wrote: > The interop issue is that a proxy might inspect the headers, see no > indication of trailers, use a len=0 DATA frame, then arrive at the end of > the origin’s response and discover trailers there anyway that it now can’t > send. As you say, the proxy can be cautious, and proxies are also allowed > to discard trailers, so it’s not a hard interop failure. But it’s an > unfortunate corner-case in an otherwise beneficial change. > > > > *From:* Lucas Pardue <lucaspardue.24.7@gmail.com> > *Sent:* Friday, December 7, 2018 4:06 PM > *To:* Mike Bishop <mbishop@evequefou.be> > *Cc:* Roberto Peon <fenix@fb.com>; Ryan Hamilton <rch= > 40google.com@dmarc.ietf.org>; Jana Iyengar <jri.ietf@gmail.com>; IETF > QUIC WG <quic@ietf.org>; HTTP Working Group <ietf-http-wg@w3.org> > *Subject:* Re: Final DATA frames > > > > Hmm, an out of order delivery issue there. I was defending this design > rather than poking holes is. Regardless, the reason I like it is that it > has flexibility down to the per-request level. I understand concerns but > think a server actor can mitigate them by simply not supporting len=0. I > can't see the interop issue, but perhaps I'm just missing it. > > > > Licas > > > > On Sat, 8 Dec 2018, 00:01 Mike Bishop <mbishop@evequefou.be wrote: > > Not a blocker in my view, but it’s a fair critique that this design is > mutually exclusive with those features. A server (whether proxy or > application library) that wants to retain the ability to do mid-content > push or trailers can’t use this feature. A server that is reasonably > certain that it won’t need them could use this feature as an optimization. > It’s worth noting that a “final DATA frame” is only ever that, and need not > be used. > > > > I wasn’t planning to get into this yet, but since it’s relevant, I have an > alternate design as an extension (not yet published) here > <https://mikebishop.github.io/quic-external-data/draft-bishop-quic-external-data.html>. > One option is to revert this change and interested parties can work on the > extension instead, if there’s interest. > > > > *From:* Lucas Pardue <lucaspardue.24.7@gmail.com> > *Sent:* Friday, December 7, 2018 3:39 PM > *To:* Mike Bishop <mbishop@evequefou.be> > *Cc:* Roberto Peon <fenix@fb.com>; Ryan Hamilton <rch= > 40google.com@dmarc.ietf.org>; Jana Iyengar <jri.ietf@gmail.com>; IETF > QUIC WG <quic@ietf.org>; HTTP Working Group <ietf-http-wg@w3.org> > *Subject:* Re: Final DATA frames > > > > Perhaps I'm overlooking a few things but the way I'd see it is that such a > proxy could be conservative and chose never to use len=0 on responses that > it is in control of. > > > > If it wanted to be more flexible at cost of risk, a proxy might also use > the content-length header to make an informed decision. The header is not > required, which sort of aligns with an origin generating a dynamic response > of unknown total length. > > > > Wrt to push. A proxy could use reception of a link header, with preload, > to decide to push before generating the parent request-response payload. If > the upstream wants to support "pass through" of push promise properly, > being conservative with length=0 would also be sensible. > > > > Trailers, well they are are hard I agree. Mike's provided some options but > I'd ask exactly what trailers are applicable to H3. Is this design really a > blocker to use? > > > > On Fri, 7 Dec 2018, 22:50 Mike Bishop <mbishop@evequefou.be wrote: > > Trailers SHOULD be declared in the headers, but it’s true that a proxy > whose origin violates that SHOULD could find itself in a state where it has > to drop the trailers. > > > > *From:* Roberto Peon <fenix@fb.com> > *Sent:* Friday, December 7, 2018 1:27 PM > *To:* Lucas Pardue <lucaspardue.24.7@gmail.com>; Ryan Hamilton <rch= > 40google.com@dmarc.ietf.org> > *Cc:* Jana Iyengar <jri.ietf@gmail.com>; IETF QUIC WG <quic@ietf.org>; > Mike Bishop <mbishop@evequefou.be>; HTTP Working Group < > ietf-http-wg@w3.org> > *Subject:* Re: Final DATA frames > > > > It will become very easy for an implementation which otherwise seems > conforming to mess up and have no way of using push, or communicating > trailers. > This really seems like premature optimization, especially in the case > where we’re taking options off the table already (like having the payload > be separate). > > A little inefficiency seems much less scary than features no longer > interoperating (e.g. because a proxy is very unlikely to know whether the > response will have trailers, etc. without some very interesting > coordination). That would feel very HTTP/1.1 pipelining (which was a good > idea, but couldn’t effectively be implemented interoperably) to me. That > was not at all a fun situation. > > > This makes me feel very uneasy. > > -=R > > > > *From: *Lucas Pardue <lucaspardue.24.7@gmail.com> > *Date: *Friday, December 7, 2018 at 12:23 PM > *To: *Ryan Hamilton <rch=40google.com@dmarc.ietf.org> > *Cc: *Roberto Peon <fenix@fb.com>, Jana Iyengar <jri.ietf@gmail.com>, > IETF QUIC WG <quic@ietf.org>, Mike Bishop <mbishop@evequefou.be>, HTTP > Working Group <ietf-http-wg@w3.org> > *Subject: *Re: Final DATA frames > > > > I was swayed by the discussion on this topic to support the proposal we > ended up with. As Ryan puts it so well, we don't discount such other use > cases, we just need the server to have enough information to decide how to > respond on the initial DATA frame it responds with. > > > > And to that end, I think it has enough enpowerment. If risk averse, it > would not use this optimisation. If sensitive to push or trailers, it can > take the care to allow them. > > > > Lucas > > > > On Fri, 7 Dec 2018, 20:12 Ryan Hamilton <rch=40google.com@dmarc.ietf.org > wrote: > > On Fri, Dec 7, 2018 at 10:16 AM Roberto Peon <fenix@fb.com> wrote: > > AFAICT, the github conversation didn’t touch on the interrelation of > framing-on-stream and push-promise, or trailers. > > > Given the current inline (interleaved) expression of push-promise within a > stream, you don’t want to prevent yourself from being able to insert the > push-promise description into the stream when you need to do it. > It’d also make trailers “interesting”, i.e. likely prevent them from > working properly. > > If having a zero-length frame is considered a problem, then another way to > solve that would be to assert that the length of a frame is the stated size > + 1, i.e. if that field is zero, then the length of the payload is one. > > > > Well, the motivation for the change is to avoid extra overhead in the very > common case of an HTTP message with no trailers and no associated pushes > (and dynamically generated content). If a particular HTTP message does not > have those properties then it can easily use a non-zero length to terminate > the DATA frame and follow it up with pushes or trailers. > >
Received on Monday, 10 December 2018 13:25:34 UTC