- From: Patrick Meenan <patmeenan@gmail.com>
- Date: Tue, 9 Jun 2020 11:26:51 -0400
- To: Bence Béky <bnc@chromium.org>
- Cc: Kazuho Oku <kazuhooku@gmail.com>, Eric Kinnear <ekinnear@apple.com>, Yoav Weiss <yoav@yoav.ws>, Patrick Meenan <pmeenan@webpagetest.org>, Lucas Pardue <lucaspardue.24.7@gmail.com>, HTTP Working Group <ietf-http-wg@w3.org>
- Message-ID: <CAJV+MGy2CytgPVEwEO3nDfpZ6h9+CCL-bODk=65cXexvS3N7Lw@mail.gmail.com>
Eric's download example is a great one for exposing the risks that would come for an implementation that supported prioritization but not reprioritization. Take the trivial example of an anchor link that links to a download (say, a 200MB installer of some kind): - When the user clicks on the link, the browser assumes it is doing a navigation and issues the request with the "HTML" priority (relatively high, possibly non-incremental - When the response starts coming back, it has the content-disposition to download to a file. - At this point, the 200MB download will block every other lower-priority request on the same connection (or possibly navigation if it is non-incremental) - The user clicks on another page on the same site and gets nothing or a broken experience until the 200MB download completes Without reprioritization the browser will effectively have to burn the existing QUIC connection and issue any requests on a new connection (and repeat for each new download). Implementing prioritization without reprioritization in this case is worse than having no prioritization support at all. On Tue, Jun 9, 2020 at 8:16 AM Bence Béky <bnc@chromium.org> wrote: > Hi all, > > I find the statement that the client often learns information that > influences priority after the request is sent conceivable. To me this > implies that the additional benefit of reprioritization is comparable to > the benefit of prioritization in the first place. Unfortunately, however, > I do not have any data on the effect of reprioritization on the users' page > load experience, neither for HTTP/2 or HTTP/3. > > However, I can speak to the complexity part. I have implemented the > PRIORITY_UPDATE frame for HTTP/3 both in the client and in the server > network stack. I consider the complexity of server-side buffering and > resource usage limiting minimal. Because of this, I oppose removing > reprioritization from the Extensible Prioritization Scheme for HTTP draft. > > Since Chrome renderer has already been sending reprioritization signals to > the network stack when an image goes in or out of the current view, now > PRIORITY_UPDATE frames should be sent upon these events when using HTTP/3. > Since we had reprioritization in place in the renderer for the HTTP/2 case, > this essentially came for free for HTTP/3 with the network stack change. > > Cheers, > > Bence > > On Tue, Jun 9, 2020 at 12:08 AM Kazuho Oku <kazuhooku@gmail.com> wrote: > >> Hello all, >> >> Thank you for all the discussion. >> >> To me it seems that there's sentiment that reprioritization would be >> useful, even if it is hard to immediately prove that it is. I share that >> sentiment. >> >> At the same time, as others (mostly recently Lucas in this thread) have >> pointed out, reprioritization is more complex to implement than compared to >> just having initial priorities. That is because the servers need to take >> care of frames arriving out-of-order across multiple streams. >> >> That brings my mind back to the question that Lucas posted: even if we >> think that reprioritization would be useful, should that be an >> indispensable part of Extensible Priorities? >> >> We know that the prioritization signals sent by clients are merely >> advices; servers might or might not honor them. What we've learned from >> HTTP/2 is that we cannot assume that the servers do the "correct" thing, if >> the scheme being defined is complex. >> >> Based on these points, my preference is starting to lean towards *not* >> having reprioritization as an indispensable feature of Extensible >> Priorities. >> >> I am totally fine (and supportive) of having reprioritization as an >> optional feature. I do not have a strong opinion regarding if it should be >> kept as an optional feature of the current draft, or if it should be a >> different draft. >> >> What do you think? Would the user experience deteriorate if the server >> only supports initial priorities? Would that deterioration be significant >> to the extent that it would be a blocker for us to proceed? >> >> >> 2020年6月9日(火) 9:46 Eric Kinnear <ekinnear@apple.com>: >> >>> Hi all, >>> >>> As another datapoint, Safari (and URLSession for general HTTP use >>> outside the browser) use reprioritization to update the incremental flag. >>> >>> One place where we do that update is during a download in Safari: since >>> some responses are displayed and some responses are downloaded, we don’t >>> know upfront if we’re going to be rendering the content onscreen or putting >>> it in the downloads list. More generally, we support the concept of “fetch >>> the response for this request” as well “download this resource to some path >>> on disk for me to deal with later”, and switching between them causes us to >>> signal whether we are [no longer] interested in incremental delivery of the >>> resource. >>> >>> Unfortunately, we don’t currently have any numbers to share about >>> efficacy here, but it does seem as though the ability to update the value >>> that we sent is key in supporting an API that allows both directions of >>> update: >>> - Clients can defer updates to a resource, knowing that they can >>> “re-request” such incremental updates should their user navigate back to >>> some particular UI that would benefit from displaying the results of >>> incremental delivery. >>> - Clients can always request incremental updates and know that they can >>> defer those incremental updates once they are able to identify that the >>> response will not be rendered onscreen. >>> >>> Anecdotally, we do know that offering the ability to adjust how the >>> on-client-device data delivery behaves can significantly impact throughput >>> itself and also power cost (mostly due to changes in batching during >>> delivery). >>> >>> Thanks, >>> Eric >>> >>> >>> On Jun 4, 2020, at 4:33 PM, Lucas Pardue <lucaspardue.24.7@gmail.com> >>> wrote: >>> >>> Hello folks, >>> >>> The Extensible Priorities draft has an open issue on the topic of >>> reprioritization [1] and the May 2020 HTTP Interim session [2] pivoted >>> towards it. The discussion highlighted that reprioritization is something >>> we need to get to the bottom of in order to unblock progressing this draft. >>> >>> Our definition of the reprioritization feature is purposefully narrow, >>> but the frame-related mechanics cause complications for implementations. >>> One option on the table is to take reprioritization out of the critical >>> path of draft-ietf-httpbis-priority by extracting the text to leave a >>> simpler definition of just the scheme and the Priority header signal. The >>> extracted text could be put in a separate I-D, reworked, replaced, or >>> dropped altogether. The choice of action is ultimately up to the WG, so >>> that is why we’re sending this email. >>> >>> Removing reprioritization from draft-ietf-httpbis-priority sounds pretty >>> drastic but in all the work that’s got us here, we’ve struggled to find >>> data that backs up its efficacy. >>> >>> Reducing Extensible Priorities to its core, clients issue priority >>> signals (U and I) based on the expectation that the server, if possible, >>> will transmit responses in the order of their urgency and request order >>> (inferred by stream ID). Reprioritization is a client sending a subsequent >>> signal (U’ and I’) that modifies the priority of in-flight responses. >>> Reprioritization is not: >>> >>> >>> - Sending a batch of requests and signalling the desire for later >>> requests to be sent before earlier ones. By design, that is supported using >>> urgency. >>> - Purposeful ordering of requests to meet a priority objective. This >>> a client implementation choice. >>> - Aborting requests or responses that are in flight. By design, that >>> is a function provided by HTTP/2 or QUIC streams that is actioned by >>> implementation choice. >>> - Manipulating a dependency tree through the lifetime of a >>> connection. By design, that is not required. >>> - Any other mechanisms to adjust the server’s scheduling of response >>> data. That is out of scope. >>> >>> >>> We’d be very interested to hear from people who support keeping >>> reprioritization and can provide data, directly or indirectly, that the way >>> it is applied in the extensible priority scheme provides tangible benefits. >>> Data to the opposite effect is also of interest. >>> >>> Cheers >>> Kazuho and Lucas >>> Extensible Priorities Editors >>> >>> [1] - https://github.com/httpwg/http-extensions/issues/1021 >>> [2] - >>> https://github.com/httpwg/wg-materials/blob/gh-pages/interim-20-05/minutes.md#priorities >>> >>> >>> >> >> -- >> Kazuho Oku >> >
Received on Tuesday, 9 June 2020 15:27:16 UTC