Re: Submitted new I-D: Cache Digests for HTTP/2

Kazuho Oku <kazuhooku@gmail.com> Fri, 15 January 2016 04:11 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 (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 49C7A1A8908 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Thu, 14 Jan 2016 20:11:35 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.902
X-Spam-Level:
X-Spam-Status: No, score=-6.902 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham
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 Ak9y2_uLZily for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Thu, 14 Jan 2016 20:11:30 -0800 (PST)
Received: from frink.w3.org (frink.w3.org [128.30.52.56]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 0D2DA1A8904 for <httpbisa-archive-bis2Juki@lists.ietf.org>; Thu, 14 Jan 2016 20:11:29 -0800 (PST)
Received: from lists by frink.w3.org with local (Exim 4.80) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1aJvfx-0007PD-BN for ietf-http-wg-dist@listhub.w3.org; Fri, 15 Jan 2016 04:07:49 +0000
Resent-Message-Id: <E1aJvfx-0007PD-BN@frink.w3.org>
Received: from maggie.w3.org ([128.30.52.39]) by frink.w3.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <ylafon@w3.org>) id 1aJvft-0007N8-AY for ietf-http-wg@listhub.w3.org; Fri, 15 Jan 2016 04:07:45 +0000
Received: from raoul.w3.org ([128.30.52.128]) by maggie.w3.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <ylafon@w3.org>) id 1aJvfq-0001vh-9L for ietf-http-wg@w3.org; Fri, 15 Jan 2016 04:07:44 +0000
Received: from 235.207.70.115.static.exetel.com.au ([115.70.207.235] helo=[192.168.1.200]) by raoul.w3.org with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from <ylafon@w3.org>) id 1aJvfp-0002Tt-CU for ietf-http-wg@w3.org; Fri, 15 Jan 2016 04:07:41 +0000
Mime-Version: 1.0 (Mac OS X Mail 9.2 \(3112\))
Content-Type: text/plain; charset="us-ascii"
To: Ilya Grigorik <ilya@igvita.com>
From: Kazuho Oku <kazuhooku@gmail.com>
In-Reply-To: <CAKRe7JGUUAinAqM9yHnUp0gJm5qwq5xvMhEo+fMnffRW7Kmu7w@mail.gmail.com>
Resent-From: Yves Lafon <ylafon@w3.org>
Date: Fri, 15 Jan 2016 03:49:44 +0000
Cc: Stefan Eissing <stefan.eissing@greenbytes.de>, Amos Jeffries <squid3@treenet.co.nz>, HTTP Working Group <ietf-http-wg@w3.org>
Content-Transfer-Encoding: quoted-printable
Resent-Date: Fri, 15 Jan 2016 05:07:34 +0100
Message-Id: <CANatvzxhCXKRFEVJDeJfdMVxP6r+jyOSCcHkY8VHiPNCSF+SwA@mail.gmail.com>
X-Name-Md5: efe3dad792d606410c9cc49cedaffc94
References: <CAAMqGzYUoCMxBxUEY9wfLOHZp7nrO4d1q5JZo=96pfEbVS1-ew@mail.gmail.com> <652C3E3A-3DA6-40BB-82FF-01A7D65FF65C@lukasa.co.uk> <CABCZv0piAoDnA1J+2pJ3HyF_iRwj9AaFGfonFjdKGfYr=cGZgQ@mail.gmail.com> <CAKRe7JG16u+MteBz4Rz7iCnHxfhLZ=QbWekrhgNhNkq+pKhVAg@mail.gmail.com> <CANatvzyT_ohm5hEcJ1o8B+AEa70607E-LUnPp5cD8sSO8X0HKA@mail.gmail.com> <56958980.1030307@treenet.co.nz> <CANatvzyOnMSLHfXcDrGSjbtZi5nFX2e9_4tHOjmR2OqBWEYUcg@mail.gmail.com> <EDB7D8A6-9121-4268-8920-223E9BE16B19@greenbytes.de> <CAKRe7JHh9maCnBgODU_rr5TFVmy3Tdm2bwEp2hHsONW8e_LTjw@mail.gmail.com> <CANatvzw6NpbpA_56GbSiCH2yEQoAuaGtXneOvrogBfucqrC8Qw@mail.gmail.com> <CAKRe7JGUUAinAqM9yHnUp0gJm5qwq5xvMhEo+fMnffRW7Kmu7w@mail.gmail.com>
Resent-To: ietf-http-wg@w3.org
X-Mailer: Apple Mail (2.3112)
X-W3C-Hub-Spam-Status: No, score=-4.0
X-W3C-Hub-Spam-Report: ALL_TRUSTED=-1, BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, NML_ADSP_CUSTOM_MED=0.9, RP_MATCHES_RCVD=-0.001, W3C_AA=-1, W3C_WL=-1
X-W3C-Scan-Sig: maggie.w3.org 1aJvfq-0001vh-9L 272a96c3ec44e19f0808bf195c3ebd2a
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Submitted new I-D: Cache Digests for HTTP/2
Archived-At: <http://www.w3.org/mid/CANatvzxhCXKRFEVJDeJfdMVxP6r+jyOSCcHkY8VHiPNCSF+SwA@mail.gmail.com>
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/30932
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: <http://www.w3.org/Mail/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>

2016-01-14 23:13 GMT+09:00 Ilya Grigorik <ilya@igvita.com>:
> 
> On Thu, Jan 14, 2016 at 12:55 AM, Kazuho Oku <kazuhooku@gmail.com> wrote:
>> 
>> So a SW trying to send cache digest needs to send the value without
>> designating it as a hop-by-hop header.  And that means that if a H2
>> origin server sees the header, it needs to determine if the request
>> came through an intermediary, and only use the value if it did not.
>> Or else, a server might end up repeatedly pushing resources to a
>> caching proxy that already has them cached.
>> 
>> This looks like a hack to me, and I am not sure if it should be
>> permitted within a specification, even though I believe it would work
>> effectively (as we are doing in H2O).
> 
> 
> With HTTPS in place, I think you can make some reasonable simplifying
> assumptions here.. that'll make things work in practice.

Agreed.

I still think this is very tricky, but we could possibly define
Cache-Digest header as a hop-by-hop header that would be capable of
representing the contents and flags of a CACHE_DIGEST frame, and state
that:

* the header SHOULD NOT be sent over an HTTP/2 connection
* a gateway MAY use the header to transfer the cache-digest value of a
client to upstream
* a client incapable of creating HTTP/2 frames (e.g. XMLHttpRequest,
Fetch API) MAY use the header in place of the CACHE_DIGEST frame; if
and only if it is estimated that the underlying connection will
directly connect to the origin server (ie. HTTPS)
* a server MAY handle the value of the header as if it was an HTTP/2 frame

Besides, we should alter how a server should behave when seeing the
digest more than once, considering the fact that HTTP/1 APIs do not
generally have the guarantee that the requests will be sent in the
order the API was called.  When receiving a new cache digest, a server
should merge the value with the value already in possession, instead
of replacing the old value with the new one.

This change will actually help the case in which multiple H2
connections are established between the client and the server; since
by changing the meaning of following CACHE_DIGESTs from replace to
merge, it becomes possible to update the cache digest maintained on
the server side by only sending the delta of the changes that happened
on the client side.

We might still want to define how a digest value can be unset from the
server-maintained digest; one way will be to use a flag to indicate
whether if the CACHE_DIGEST frame is a delta to the previous or if is
a replace.  Or clients can simply close the H2 connection to clear the
server-side digest.



Also, we may need to consider how CACHE_DIGEST-aware web browsers
should communicate with SW.

Considering the fact that SW is essentially a proxy implemented within
the browser, I believe CACHE_DIGEST-aware web browsers should include
within the request it passes to SW the digest of the browsers' cache
using `Cache-Digest` header.

SW may alter the value, and then issue an HTTP request with the
`Cache-Digest` header using Fetch API.

The Fetch API implementation of the web browser should convert the
value supplied in the `Cache-Digest` header to a HTTP/2 frame before
sending the request over the network.  It should also try to minimize
the size of the frame, by calculating the difference between the
supplied digest value and the previously-sent values, and only send
the difference as the delta (as discussed in the above issue).

Or else, there should be an interface for reading / writing cache-digest values.

It should also be noted that IIRC SW cannot be defined for an entire
domain.  That means that in case SW is registered (and if SW is
capable of altering the cache-digest), a client MUST NOT try to send
cache digest for the entire domain even when other conditions permit
(i.e. server sends an wild-card certificate).

> ig



-- 
Kazuho Oku