Re: Specifying Range in Link preload header for HTTP/2 Push?

Bence Béky <bnc@chromium.org> Wed, 10 July 2019 13:34 UTC

Return-Path: <ietf-http-wg-request+bounce-httpbisa-archive-bis2juki=lists.ie@listhub.w3.org>
X-Original-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Delivered-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E7BD2120140 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Wed, 10 Jul 2019 06:34:10 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.753
X-Spam-Level:
X-Spam-Status: No, score=-2.753 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249, MAILING_LIST_MULTI=-1, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=chromium.org
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id dRChbIMrlH8V for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Wed, 10 Jul 2019 06:34:08 -0700 (PDT)
Received: from frink.w3.org (frink.w3.org [IPv6:2603:400a:ffff:804:801e:34:0:38]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 73EFE1200DE for <httpbisa-archive-bis2Juki@lists.ietf.org>; Wed, 10 Jul 2019 06:34:08 -0700 (PDT)
Received: from lists by frink.w3.org with local (Exim 4.89) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1hlCgt-0001Yg-DW for ietf-http-wg-dist@listhub.w3.org; Wed, 10 Jul 2019 13:31:23 +0000
Resent-Date: Wed, 10 Jul 2019 13:31:23 +0000
Resent-Message-Id: <E1hlCgt-0001Yg-DW@frink.w3.org>
Received: from uranus.w3.org ([128.30.52.58]) by frink.w3.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from <bnc@google.com>) id 1hlCgr-0001Y3-Pw for ietf-http-wg@listhub.w3.org; Wed, 10 Jul 2019 13:31:21 +0000
Received: from www-data by uranus.w3.org with local (Exim 4.89) (envelope-from <bnc@google.com>) id 1hlCgr-0007gs-Jp for ietf-http-wg@listhub.w3.org; Wed, 10 Jul 2019 13:31:21 +0000
Received: from titan.w3.org ([2603:400a:ffff:804:801e:34:0:4c]) by frink.w3.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from <bnc@google.com>) id 1hlBRL-0000kz-4O for ietf-http-wg@listhub.w3.org; Wed, 10 Jul 2019 12:11:15 +0000
Received: from mail-vs1-xe44.google.com ([2607:f8b0:4864:20::e44]) by titan.w3.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from <bnc@google.com>) id 1hlBRI-0001Jz-NU for ietf-http-wg@w3.org; Wed, 10 Jul 2019 12:11:14 +0000
Received: by mail-vs1-xe44.google.com with SMTP id v129so1311167vsb.11 for <ietf-http-wg@w3.org>; Wed, 10 Jul 2019 05:10:52 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=k6jOAZtan07b9vLEsm9uyylIwnhk3J/5NgfzvGgJ5KA=; b=a6hGSMD/cSkRYSOA/W3Pgm6zvFrftW4gloKOyDtM9jv/+/pEvFIIUMMvbfqs/LhmrI 4EIuR7UsGBLKpTWn/BgirdDb3ogAT8gQXb+L/fhQE8K8Zo4b13swF4ixlOQigztG73s9 8R0mnKuvDDet/N49XIVT9PbTLuBqH4SKKA8Dg=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=k6jOAZtan07b9vLEsm9uyylIwnhk3J/5NgfzvGgJ5KA=; b=DP5Qt4y013JeahKoCrD39uMtSe3jsm6BTG875nYwHyE37oILhHL+T3yIHJxXe89IdV cCme7+D8tdjMiOqCXd3hEmfDeqBEb3uyKKXLIOp82Fi3OqjOGADbsXHHHu5oQ1CTLLtX /ogivXg3AkwXySOp0KzPHlolIG3WKXzY9WScj9vnDXZNFdmu2ciujOhgGFe2xEl9koBg 0RbPOIQyb7b8NGSb5VJAfAN8wD5uo1Rb1AZ4JLoBvDn1R4VfoTw3MX6KRPdiGYSAH7to QMs7opSTOaxN0NTWQkYgIMa7fRsyKcS4Z+8mS7GyJwnuFzuKxR645sOzcsnFgv+Ve3Ua vWhw==
X-Gm-Message-State: APjAAAXNYq2QUzBHaYxSqsGy0qmGmBBgk5MfL/ablPW0rA92qxV0PAeG 7dVdROCUO+SY71HJIQArlgfvSEkkVzsj9nTOtZLqiQ==
X-Google-Smtp-Source: APXvYqy05ZCrIywhVgTrx/Tvth1C2K/pgqr6CJ1SoEGYs7LW37mC2PwGZian8HUn+XM4AimMo1lrn0t/5e+frF44yRk=
X-Received: by 2002:a67:a44b:: with SMTP id p11mr16269299vsh.237.1562760651169; Wed, 10 Jul 2019 05:10:51 -0700 (PDT)
MIME-Version: 1.0
References: <63CAE7E1-34E9-42DA-A7DD-1E17223032AE@apple.com> <CALGR9oaNnSKp-a8tj+7ojc_g+AhJQ4jF5Z738mjhXhoesfYqLg@mail.gmail.com> <CC99D5CA-1C8B-4200-A6D4-059ABCD6DBA8@apple.com> <D2C627CF-C1D3-459E-8489-CD0530A30A9B@apple.com> <C1CBCD79-7D43-4346-AD79-11658F848126@apple.com>
In-Reply-To: <C1CBCD79-7D43-4346-AD79-11658F848126@apple.com>
From: Bence Béky <bnc@chromium.org>
Date: Wed, 10 Jul 2019 08:10:40 -0400
Message-ID: <CACMu3tqTtStsBL1eQ8HPxcyuH7WrTTAKxioob7gN5msZL0HG0A@mail.gmail.com>
To: Roger Pantos <rpantos@apple.com>
Cc: Leif Hedstrom <lhedstrom@apple.com>, Lucas Pardue <lucaspardue.24.7@gmail.com>, HTTP Working Group <ietf-http-wg@w3.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=2607:f8b0:4864:20::e44; envelope-from=bnc@google.com; helo=mail-vs1-xe44.google.com
X-W3C-Hub-Spam-Status: No, score=-12.2
X-W3C-Hub-Spam-Report: BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.25, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, USER_IN_DEF_SPF_WL=-7.5, W3C_AA=-1, W3C_IRA=-1, W3C_WL=-1
X-W3C-Scan-Sig: titan.w3.org 1hlBRI-0001Jz-NU 74387bdc03378dac54f30111f5d96252
X-caa-id: d36cdbe894
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Specifying Range in Link preload header for HTTP/2 Push?
Archived-At: <https://www.w3.org/mid/CACMu3tqTtStsBL1eQ8HPxcyuH7WrTTAKxioob7gN5msZL0HG0A@mail.gmail.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/36783
X-Loop: ietf-http-wg@w3.org
Resent-Sender: ietf-http-wg-request@w3.org
Precedence: list
List-Id: <ietf-http-wg.w3.org>
List-Help: <https://www.w3.org/Mail/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>

Hi,

FYI I worked on this in Chrome a little more about a year ago, aiming
to do something simple, with no particular use case in mind.
Currently range request pushes are accepted, but matched with requests
only if the range matches exactly.  Caching in this case is trivial.
I imagine this would be relatively easy to implement in other clients
as well.

If you could work some client side JS magic to issue requests with the
same range that the server has pushed, it would work with Chrome
today.  The only caveat is that Chrome only allows one pushed stream
with any given URL, so you wouldn't be able to push the second range
for the same resource until the first one is matched by a request,
which of course the server has no insight into seeing when it happens.
I imagine other client might have a similar restriction.  In fact,
about 40% of incoming pushes are rejected as duplicate URL, indicating
that many servers are pushing the same request repeatedly on a single
connection, therefore rejecting such pushes seems like a necessary
optimization to avoid wasting downlink.

Cheers,

Bence


On Tue, Jul 9, 2019 at 11:26 PM Roger Pantos <rpantos@apple.com> wrote:
>
>
>
> On Jul 9, 2019, at 7:01 PM, Leif Hedstrom <lhedstrom@apple.com> wrote:
>
>
>
> On Jul 9, 2019, at 19:05, Roger Pantos <rpantos@apple.com> wrote:
>
>
>
> On Jul 9, 2019, at 4:03 PM, Lucas Pardue <lucaspardue.24.7@gmail.com> wrote:
>
> Hi Roger,
>
> On Tue, 9 Jul 2019, 21:36 Roger Pantos, <rpantos@apple.com> wrote:
>>
>> Greetings HTTP experts,
>>
>> I’m interested in employing HTTP/2 Push of Range requests for media streaming. It seems like the core h2 protocol handles this well enough; the PUSH_PROMISE can contain a Range header, and at the very least if that ends up in the client push cache then a request for that exact Range should match.
>>
>> That being said, I’d also like to signal the push request to downstream HTTP caches. Push is typically signaled via the Link header with rel=preload, but https://www.w3.org/TR/preload/ doesn’t seem to define signaling and associated Range.
>>
>> Has anyone defined a Link extension to signal an associated Range?
>
>
> I've spoken informally to some people on related topics. I presume this is related to Apple's LHLS? Or in lay speak, one approach to low-latency HTTP-based streaming. It'd be great to have a reference to cite when talking around the topic.
>
>
> That’s right. Here’s a link to the current white paper: https://developer.apple.com/documentation/http_live_streaming/protocol_extension_for_low-latency_hls_preliminary_specification
>
>
>>
>> If not, would anyone object to the following Link extension?
>>
>> range-link-extension = “range” = ranges-specifier
>>
>> where ranges-specifier is defined in RFC 2616.
>>
>> An example would be:
>>
>> Link: </media.mp4>; rel=preload; as=video; type=video/mp4; range=1380-14226
>>
>>
>> thanks,
>>
>> Roger Pantos
>> Apple Inc.
>
>
> The general impression I've observed is that such a range signal in Link would be useful to a number of services, and that there would be benefit in adopting a common signal.
>
> Furthermore, while the use of server push might have debatable benefits for the web browsing use case. I'm led to believe that it has affirmative uses in this streaming model. Again, some evidential data would be really interesting.
>
>
> The use of Push in our LL-HLS design eliminates one round trip per (partial) media segment downloaded. We’ve got data that shows round trip times to media servers can exceed 100 (or even 200) ms, particularly on cellular networks, even in the U.S.
>
> When playing at very low delay-from-live (2s or less), the client can only buffer around 1s ahead of the playhead (because that’s all there is). New segments must be loaded in a timely fashion to prevent playback from stalling. Speeding that up by 10% of the overall budget is a significant win.
>
> In addition, keeping the TCP send pipe full improves lost-packet recovery performance of the primary resource that accompanies the push (via fast retransmit).
>
>
> Finally, server push and caching is an interesting area that might benefit from some more information. Some of the WG might be interested in how this gets implemented in your use case.
>
>
> Certainly. I’d be happy to answer as I’m able to.
>
>
> FWIW, server push sort of dictates that you can write the object to cache if I recall.
>
>
> Absolutely. That’s what we want.
>
>
> That much said, caching partial objects can be tricky at best. Do you treat each range as a unique object ?
>
>
> That’s the simplest approach, and it should work pretty well for LL-HLS. From a cache point of view it’s effectively the same as the non-byterange case, where each partial segment has its own URL.
>
> If so, how do you avoid an explosion in various range sizes?
>
>
> There shouldn’t be much of an explosion. The byte ranges pushed are determined by the origin, and there won’t be more than about 20 per URL. So it hopefully won’t hurt cache search performance too much.
>
> If you try to combine partial objects into one larger object,  the cache code tend to get tricky (we gave up in ATS).
>
> This is probably something worthwhile discussing to understand the implications both on servers and clients. It’s non trivial, but definitely interesting!
>
>
> Agreed,
>
>
> Roger.
>
>
> Cheers,
>
> — Leif
>
>
> If there’s nothing currently defined, what would be the next step? To write an Internet-Draft specifying the Link extension?
>
> (I’m also interested in a way for a server to indicate that pushed resources are to be strictly ordered (such as via a dependency tree). Today, multiple pushes get multiplexed at the default priority. But that’s a different discussion.)
>
>
> Roger.
>
>
> Cheers
> Lucas
>
>