Re: Experiences with HTTP/2 server push

Martin Thomson <> Fri, 05 August 2016 12:43 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 1AD7612D151 for <>; Fri, 5 Aug 2016 05:43:16 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -8.308
X-Spam-Status: No, score=-8.308 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.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.287, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (2048-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id BxKN1Hb5PeNg for <>; Fri, 5 Aug 2016 05:43:14 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 1E19A12B018 for <>; Fri, 5 Aug 2016 05:33:23 -0700 (PDT)
Received: from lists by with local (Exim 4.80) (envelope-from <>) id 1bVeFK-0006vL-02 for; Fri, 05 Aug 2016 12:29:02 +0000
Resent-Date: Fri, 05 Aug 2016 12:29:01 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <>) id 1bVeFE-0006ua-6e for; Fri, 05 Aug 2016 12:28:56 +0000
Received: from ([]) by with esmtps (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <>) id 1bVeF9-0002qG-3Y for; Fri, 05 Aug 2016 12:28:54 +0000
Received: by with SMTP id p186so135311040qkd.1 for <>; Fri, 05 Aug 2016 05:28:30 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=YRCO3WlxaF/83itbtasPFyIzOGky2pci+3GszVvca1k=; b=XcEBpGhsd319DUNFrqnKRLMej9Z7pUWF9TQjPHfWnMT3mGe1DNkSG3o4IuOl2t6aA6 ejq+jKMP3w157MEdJYd2Q67ih/evpMCzKhvTlG/GeIlw5FpQnWUVnJEdCKwKJ+HcBL9c wsDjT8zZM3wGiCpeIxChM4BEzAz0N2T75Xh41LKibxliZpU8h89kFs95ceEmWtGY/wlj 8rQH7zT0QOGlPwVo2wvaPTGV7hjwPrzt2ENbIfDj77toTAmtGRKjuLHQpMPw3vG42x/R ulCW9R3TmypGdyPcw8KguEmOIBuqxDNYXxCBRph++Mvdv41wrV2ER6grvN9NFBl0OlUl R7Bg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=YRCO3WlxaF/83itbtasPFyIzOGky2pci+3GszVvca1k=; b=egq4f4J/Ty79Gk/CQ2wnkqQO/QaiWJUsCJebPc7RVhUeNM+cZTcxx4OwYIaDHBzwWQ CDJjaw89FIRWL5Z/Yz59NL3jrLzk2TVcbWJi7h8qk+QopjtNBIV6kOJHiUvu1S3Db+XY Wa1zMuqpMr9BXOoEx3I5a01t3KuZrgnWng6phreLQySXL+fEYgHt14fQTHMnhjKI8qoy aK7yMB1fifRsAx6kU5j8N+OpQwYiSkoAxXxQB6dh/Cq68+NsNcJ5jDzHSf1PjxM9tltr 0R6svTX2GvAb5oWJpALxztb97tn/IILUuheMCVZQYTfGa99vS5HJEKvM3UXbHBa8iBsj r5vg==
X-Gm-Message-State: AEkoousIflp9VPThPCOA5h/bFTXFt+KbDQRq+WZ0GKAsMPOLYS+bIPMb0rzoHdIOHR5Rk6BIc/0//dxn9geAvg==
X-Received: by with SMTP id u127mr12262555qkb.156.1470400104946; Fri, 05 Aug 2016 05:28:24 -0700 (PDT)
MIME-Version: 1.0
Received: by with HTTP; Fri, 5 Aug 2016 05:28:24 -0700 (PDT)
In-Reply-To: <>
References: <>
From: Martin Thomson <>
Date: Fri, 05 Aug 2016 22:28:24 +1000
Message-ID: <>
To: Tom Bergan <>
Cc: HTTP Working Group <>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=;;
X-W3C-Hub-Spam-Status: No, score=-7.9
X-W3C-Hub-Spam-Report: AWL=1.832, BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, W3C_AA=-1, W3C_DB=-1, W3C_IRA=-1, W3C_IRR=-3, W3C_WL=-1
X-W3C-Scan-Sig: 1bVeF9-0002qG-3Y d73a81948bfb35567ad23cafdd136a34
Subject: Re: Experiences with HTTP/2 server push
Archived-At: <>
X-Mailing-List: <> archive/latest/32193
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

I didn't read through this in detail, but there is a fairly big error
here when it comes to the description of using priorities.  You say:

> One way to implement this is for the server to update its HTTP/2 priority tree, **then send PRIORITY frames to the client that make A the exclusive parent of C** and C the exclusive parent of D. This is an attractive implementation because the server can continue using the HTTP/2 priority tree to order requests C, D, and B.

The server can't send PRIORITY frames in this way.  Or at least, that
won't have the effect you think it does.

The server can (and should) just send as it sees fit, using as input
its own knowledge and the priority that the client has provided.  If
the server sends PRIORITY, that is to affect client processing (hint:
that's not going to happen here). Given that the space that you are
examining is a problem for server-to-client transmission only, the
server expressing priority is pointless.

On 4 August 2016 at 10:21, Tom Bergan <> wrote:
> Hi all,
> Our team has been experimenting with H2 server push at Google for a few
> months. We found that it takes a surprising amount of careful reasoning to
> understand why your web page is or isn't seeing better performance with H2
> push. We also encountered a lack of good documentation: How should one go
> about using H2 push? What are the best practices? We tried to distill our
> experiences into five "rules of thumb" that are described in this doc:
> The doc is a little long, but the first two pages give a decent tl;dr. I
> suspect the ideas and conclusions will be "obvious" to many people on this
> mailing list, at least in hindsight. Hopefully other folks interested in H2
> server push will find this useful. Let us know if you have any comments.
> -Tom, Simon, and Michael