Re: Extensible Priorities and Reprioritization

Lucas Pardue <> Fri, 05 June 2020 15:58 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 28FBC3A07EA for <>; Fri, 5 Jun 2020 08:58:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.748
X-Spam-Status: No, score=-2.748 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (2048-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id mksjRYUflWfJ for <>; Fri, 5 Jun 2020 08:58:48 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 217463A07BA for <>; Fri, 5 Jun 2020 08:58:47 -0700 (PDT)
Received: from lists by with local (Exim 4.92) (envelope-from <>) id 1jhEhH-0003vh-GN for; Fri, 05 Jun 2020 15:55:55 +0000
Resent-Date: Fri, 05 Jun 2020 15:55:55 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <>) id 1jhEhE-0003uv-Oo for; Fri, 05 Jun 2020 15:55:52 +0000
Received: from ([2a00:1450:4864:20::331]) by with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from <>) id 1jhEhC-0003Wv-Sx for; Fri, 05 Jun 2020 15:55:52 +0000
Received: by with SMTP id y20so1890821wmi.2 for <>; Fri, 05 Jun 2020 08:55:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=HXgX5U98dFHIweZH+T0H63FkNSL6vmy8Q0zBy8xm3fs=; b=TOgJVI1r/8NftFkIzhF0fsTCIWZWXlUEGxbvtXtMDy20HFDKHLpaGKEABjmivI08d/ 0nRrDFL6BqZ+KlDhmQEbxpX8INCY/9DFVEiOEvp/P8KRpkjotxAH9XeLssO8IfhUwQ5S 6mqMB91+Q0D/aTQMIcz/Gsagh6Iyn1YP1KjaeC4EqLxMxGOZYstdkQ8AnIIoryrJ2nL8 2tKodSkVm8mT0R12AecaQwNFQmkTq9eoGr4qr7FyNXLn+DSBsvXdPoFjeyoisFQIfYof yDfZBZrY8XEchvobovjZD8Cktc7fFcecHYXlJ+TIony1odr5gbe7L5h0sUVLO5s7PM8t TDjw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=HXgX5U98dFHIweZH+T0H63FkNSL6vmy8Q0zBy8xm3fs=; b=O0uX4pCq+BRPDulrQRVKTMTIa1XPg7OJmgKSWUw8K/bmeVA7jnOJtHs/BjG/5RO4KH ajIqREKdPlXmbLJY8BLG8IiIxnjx6RwIlYOCuGTy0Aj873ZEh0ycGazuk/5Lg3enLJ1R RIaswoFBu0sijLtglI6trdaJdudvI2/B9BKT/cZoh5mixdVzTfo9SN2WIptktOOv1FBZ D6X2wVaRMw3kZU0bBGDtYV/5D8YXrU/uvYMhA/qdv/ZRwItPMSii+Xn/ibqykjaReK2a QpLo8MOLTOmR+SOy4gfCOQm0NWBU0qbT9P3qLPEiKv30f66J642wWNf4H5Wiavm7M4+k fI6w==
X-Gm-Message-State: AOAM531jd6A4H4aL5k/d1Bkg8bj8CVrHlXrfW1MUHYEb9DmgoREO8/7T lXFnL8+YGZcVSGlQT11Alqzn3Pgdo/MiII4xYEI=
X-Google-Smtp-Source: ABdhPJzx58eWKsjm/SU5+FXiKI2nLx7FpeWcWonP0dfzZBS0nCOoCUKPzWpSjY8rKqhnZuMDTaqDyS4z/lMe3WCwo5M=
X-Received: by 2002:a7b:c007:: with SMTP id c7mr1430934wmb.165.1591372539001; Fri, 05 Jun 2020 08:55:39 -0700 (PDT)
MIME-Version: 1.0
References: <> <> <> <>
In-Reply-To: <>
From: Lucas Pardue <>
Date: Fri, 5 Jun 2020 16:55:27 +0100
Message-ID: <>
To: Patrick Meenan <>
Cc: Yoav Weiss <>, =?UTF-8?Q?Bence_B=C3=A9ky?= <>, Tarun Bansal <>, HTTP Working Group <>, Kazuho Oku <>
Content-Type: multipart/alternative; boundary="000000000000e47d6705a7584aa1"
Received-SPF: pass client-ip=2a00:1450:4864:20::331;;
X-W3C-Hub-Spam-Status: No, score=-7.8
X-W3C-Scan-Sig: 1jhEhC-0003Wv-Sx b9873143a2b298a30bf57d218eedc0f3
Subject: Re: Extensible Priorities and Reprioritization
Archived-At: <>
X-Mailing-List: <> archive/latest/37725
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

Hey Patrick,

On Fri, Jun 5, 2020 at 3:41 PM Patrick Meenan <> wrote:

> If you're looking for a distilled test case, my HTTP/2 prioritization
> test page
> <> used
> for the prioritization support tracking.  It
> loads a bunch of images "below the fold" and then after they start loading
> it injects 2 images (one after the other) into the viewport.

It's a good test case but I wonder how it directly translates to
reprioritization frames. I think understanding specific wire behaviour in
H2 and mapping that into Extensible priorities is the key to figuring out
if PRIORITY_UPDATE frames are required. I suspect that in H2 and chrome,
your test case triggers an implicit tree reshuffle because the new request
is inserted somewhere with an explicit dependency.  Or maybe it triggers a
whole set of PRIORTY frames that shuffle the tree? How does the behaviour
of other implementations look on the wire?

That said, I think things play out differently in Extensible priorities.
The "below the fold" images can be requested at an urgency of N, the
injected images are requested later at a higher urgency between N-1 and 0.
A server that follows the specification's recommendations will pass your
test; no reprioritization frames are required to be sent.

> Building a whole separate "VIEWPORT" scheme that is browser-specific feels
> a bit like punting on the problem and effectively killing it, particularly
> since most of the drive behind simplifying prioritization was for the
> browser use case anyway.

Point taken. Although I will clarify that some of the drive toward a header
was to expose more control to web developers. We might also want to
consider how this scheme's reprioritization feature would or would not be
exposed. That might limit it's usefulness even further.

What are the difficult points around implementing the current
> reprioritization plans? Is it a sequencing problem with streams and
> out-of-band changes? Would it help if the priority change was actually a
> stream-level message and specifically changed just the urgency of the
> requested stream (with any server-side headers overriding even the changed
> urgency)?

The H2 request/response exchange sequence [1] requires the final frame in
the sequence to bear the END_STREAM flag, which closes the send side of the
stream and prevents any more frames being sent. Furthermore, see the thread
Mike Bishop started about H2's lack of grease and the impact on extension
points [2], support for extension frames on request streams might cause
connection failures. Since then Cloudflare has fixed a regression that
addresses this problem but I'm unsure of the status in the wider ecosystem.

For the above reasons, restricting PRIORITY_UPDATE to the control stream
(H2 stream 0) is a safe deployable approach. But it introduces cross-stream
referencing and that requires some careful consideration for
implementations, such as buffering and resource usage.

Channeling the WG discussion, I think it is reasonable to ask if clients
are interested in implementing the reprioritization feature. Because if we
don't exercise it with running code, it is hard to iron out the issues and
capture the necessary detail in the document. As evidenced by the problems
found in H2 stacks after they widely shipped.


[1] -
[2] -