Re: Last Call: <draft-ietf-httpbis-http2-16.txt> (Hypertext Transfer Protocol version 2) to Proposed Standard

Julian Reschke <julian.reschke@greenbytes.de> Sun, 11 January 2015 23:18 UTC

Return-Path: <ietf-http-wg-request+bounce-httpbisa-archive-bis2juki=lists.ietf.org@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 B2A8A1A09CF for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Sun, 11 Jan 2015 15:18:19 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.912
X-Spam-Level:
X-Spam-Status: No, score=-6.912 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] 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 UC5GU9rmQzcE for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Sun, 11 Jan 2015 15:18:16 -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 B9F5A1A03A5 for <httpbisa-archive-bis2Juki@lists.ietf.org>; Sun, 11 Jan 2015 15:18:16 -0800 (PST)
Received: from lists by frink.w3.org with local (Exim 4.80) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1YARiZ-0001bA-Ir for ietf-http-wg-dist@listhub.w3.org; Sun, 11 Jan 2015 23:14:47 +0000
Resent-Date: Sun, 11 Jan 2015 23:14:47 +0000
Resent-Message-Id: <E1YARiZ-0001bA-Ir@frink.w3.org>
Received: from lisa.w3.org ([128.30.52.41]) by frink.w3.org with esmtp (Exim 4.80) (envelope-from <julian.reschke@greenbytes.de>) id 1YARiV-0001aK-07 for ietf-http-wg@listhub.w3.org; Sun, 11 Jan 2015 23:14:43 +0000
Received: from mail.greenbytes.de ([217.91.35.233]) by lisa.w3.org with esmtp (Exim 4.72) (envelope-from <julian.reschke@greenbytes.de>) id 1YARiT-0004f4-LY for ietf-http-wg@w3.org; Sun, 11 Jan 2015 23:14:42 +0000
Received: from [192.168.2.175] (unknown [84.187.47.145]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.greenbytes.de (Postfix) with ESMTPSA id 63E3315A069C; Mon, 12 Jan 2015 00:14:19 +0100 (CET)
Message-ID: <54B303CA.3080700@greenbytes.de>
Date: Mon, 12 Jan 2015 00:14:18 +0100
From: Julian Reschke <julian.reschke@greenbytes.de>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0
MIME-Version: 1.0
To: ietf@ietf.org
CC: ietf-http-wg@w3.org
References: <20141231153045.2584.87794.idtracker@ietfa.amsl.com>
In-Reply-To: <20141231153045.2584.87794.idtracker@ietfa.amsl.com>
Content-Type: text/plain; charset="windows-1252"; format="flowed"
Content-Transfer-Encoding: 7bit
Received-SPF: pass client-ip=217.91.35.233; envelope-from=julian.reschke@greenbytes.de; helo=mail.greenbytes.de
X-W3C-Hub-Spam-Status: No, score=-3.1
X-W3C-Hub-Spam-Report: AWL=-3.112, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001
X-W3C-Scan-Sig: lisa.w3.org 1YARiT-0004f4-LY 99ffd0d62351de20d5b2a25c69b0c37b
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Last Call: <draft-ietf-httpbis-http2-16.txt> (Hypertext Transfer Protocol version 2) to Proposed Standard
Archived-At: <http://www.w3.org/mid/54B303CA.3080700@greenbytes.de>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/28458
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>

Martin Thomson wrote:
> ...
> On 6 January 2015 at 05:13, Stefan Eissing <stefan.eissing@greenbytes.de> wrote:
 > ...
>> 2. PUSH_PROMISE and header completeness
>> How are cache sensitive headers like "Authorization" handled in PUSH_PROMISE request headers? If simply left out, the client could store pushed resources in a cache where they do not belong. Should servers use extra Cache-Control directives in such pushed responses?
>
> This is part of the same sort of advice that your first question
> touches on: how do you effectively implement feature X.  Here, the
> rules are pretty easy to infer.  If you have a resource that would
> send Vary for a header field that the server cannot produce on its own
> then server push probably won't work.  Authorization is a great
> example.  The server might be able to produce *some* Authorization
> headers, particularly if one was in the request that the push is
> associated with though.
> ...

But then varying on "Authorization" does *not* require setting "Vary", 
because that aspect is baked into the protocol. (And some impls do the 
same thing for "Cookie" although not required by the spec).

Maybe this indicates that we just need more prose here.

>> Related: how is the role of the ACCEPT-* request headers? Should a client reject PUSH_PROMISE with request headers that does not match its own ACCEPT-* preferences? What if it uses ACCEPT-* and the PUSH_PROMISE is lacking those? Or the other way around?
>
> The same applies here.  A client uses the rules in Section 4 of RFC
> 7234 to determine whether a cached response can be used to satisfy its
> request.  If a client sends Accept: x/y and a server has pushed a
> response that included Vary: Accept and a content type that didn't
> match the clients preferred Accept header field, then the client
> should probably make a request rather than use the push.

This seems less of a problem than the one before as the HTTP responses 
are supposed to be self-descriptive, and clients *in general* an not 
assume that the server follows their preferences wrt Accept-*.

>> 3. Clarification on server-initiated push?
>> In discussions with colleagues some had the notion that HTTP2 would allow server initiated "requests". My reading of the draft is that this is not really the case. Server pushes are only defined for streams opened by the client.
>> - Is this the correct reading of the spec?
>> - If yes, has HTTP2 any advise how to best do long polling or what is the recommended alternative?
>
> Patrick has addressed that.  If you want a worked example of
> "long-polling" in HTTP/2, see
> https://martinthomson.github.io/drafts/draft-thomson-webpush-http2.html

Understood, but again it might be good if the spec actually was a bit 
clearer about this.

>> 4. SETTINGS_MAX_HEADER_LIST_SIZE as advisory
>> It seems undefined what a client (library) should do with it. Will this not give rise to interop problems if one client respects it and fails requests immediately while another does no checks and sends them anyway? MUST a peer that announces a limit always reply with 431 to requests that exceed it?
>
> Yes, this is a little nebulous, but intentionally.  If you consider an
> end-to-end protocol with multiple hops, the value that is actually
> enforced is the lowest value from all of the servers in the path of a
> request.  Since each request might follow different paths, the best
> that *this* protocol can do is provide information on the value
> enforced by the next hop (who knows if the next hop is even HTTP/2).
>
> The server is not required to send 431 if the size exceeds this: maybe
> some resources can handle streamed header fields, maybe some resources
> are forwarded to different origin servers.
>
> If you can't think of a concrete action to take based on this setting,
> I would ignore it.

Do we have any implementations that actually do something with this setting?

> ...
>> 7. Opinion: Chapter 9.1 Limitation to single connection
>> Have we not been here before? In the past, such SHOULD NOTs have not been very helpful. (Most likely already discussed heavily on the list...no strong feelings about this. It will be ignored anyway if not proving useful.)
>
> Indeed we have.  And when HTTP/1.1 advised a limit of 2 connections,
> that was done despite the fact that it was introducing a real
> limitation on the usability of the protocol.  2 wasn't a special
> number, it was just something someone made up (as is 6); 1 is one of
> the three important numbers, not an arbitrary choice.  Here, we have
> no such limitation because there is no corresponding limit on
> concurrency within the protocol.  There are still transport-level
> limitations (INIT_CWND, for instance), but I think some people expect
> to be lifting those over time.  I think that the working group is
> firmly intent in making this one stick.
> ...

Thread start: 
<http://lists.w3.org/Archives/Public/ietf-http-wg/2014JulSep/0147.html>

Ticket: <https://github.com/http2/http2-spec/issues/529>

I'm not very happy about the SHOULD, as we have heard about situations 
where it most definitively will be violated, see for instance William 
Chan in 
<http://lists.w3.org/Archives/Public/ietf-http-wg/2014JulSep/0297.html>.

Best regards, Julian