Re: #496: Feedback on Fallback

Jason Greene <jason.greene@redhat.com> Tue, 07 October 2014 17:45 UTC

Return-Path: <ietf-http-wg-request@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 CC09C1A82E2 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Tue, 7 Oct 2014 10:45:19 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.688
X-Spam-Level:
X-Spam-Status: No, score=-7.688 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, RP_MATCHES_RCVD=-0.786, 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 zUzvFk26ftgg for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Tue, 7 Oct 2014 10:45:15 -0700 (PDT)
Received: from frink.w3.org (frink.w3.org [128.30.52.56]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 949231A802B for <httpbisa-archive-bis2Juki@lists.ietf.org>; Tue, 7 Oct 2014 10:45:14 -0700 (PDT)
Received: from lists by frink.w3.org with local (Exim 4.72) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1XbYmL-0006LB-Ps for ietf-http-wg-dist@listhub.w3.org; Tue, 07 Oct 2014 17:42:29 +0000
Resent-Date: Tue, 07 Oct 2014 17:42:29 +0000
Resent-Message-Id: <E1XbYmL-0006LB-Ps@frink.w3.org>
Received: from maggie.w3.org ([128.30.52.39]) by frink.w3.org with esmtp (Exim 4.72) (envelope-from <jason.greene@redhat.com>) id 1XbYmF-0006Jb-Eh for ietf-http-wg@listhub.w3.org; Tue, 07 Oct 2014 17:42:23 +0000
Received: from mx1.redhat.com ([209.132.183.28]) by maggie.w3.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.72) (envelope-from <jason.greene@redhat.com>) id 1XbYmE-00073t-7J for ietf-http-wg@w3.org; Tue, 07 Oct 2014 17:42:23 +0000
Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s97Hfp2K007647 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 7 Oct 2014 13:41:52 -0400
Received: from [10.10.61.176] (vpn-61-176.rdu2.redhat.com [10.10.61.176]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s97Hfn43012206 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO); Tue, 7 Oct 2014 13:41:50 -0400
Content-Type: text/plain; charset="windows-1252"
Mime-Version: 1.0 (Mac OS X Mail 7.3 \(1878.6\))
From: Jason Greene <jason.greene@redhat.com>
In-Reply-To: <4d24b064f9d944daa26d6f96eb797632@BL2PR03MB132.namprd03.prod.outlook.com>
Date: Tue, 07 Oct 2014 12:41:48 -0500
Cc: Eliot Lear <lear@cisco.com>, Mark Nottingham <mnot@mnot.net>, HTTP Working Group <ietf-http-wg@w3.org>
Content-Transfer-Encoding: quoted-printable
Message-Id: <14D199AC-EE5D-452A-B293-4E195374882E@redhat.com>
References: <152c2ec3edb04e048252116634915828@BL2PR03MB132.namprd03.prod.outlook.com> <1F6A63C8-B003-403D-BD16-36747655C94D@mnot.net> <54338E85.5080008@cisco.com> <1ffb3ed58f2240aba2a936f47e028a51@BL2PR03MB132.namprd03.prod.outlook.com> <4d24b064f9d944daa26d6f96eb797632@BL2PR03MB132.namprd03.prod.outlook.com>
To: Mike Bishop <Michael.Bishop@microsoft.com>
X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24
Received-SPF: pass client-ip=209.132.183.28; envelope-from=jason.greene@redhat.com; helo=mx1.redhat.com
X-W3C-Hub-Spam-Status: No, score=-6.0
X-W3C-Hub-Spam-Report: AWL=-0.945, RCVD_IN_DNSWL_HI=-5, SPF_HELO_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01
X-W3C-Scan-Sig: maggie.w3.org 1XbYmE-00073t-7J 6794f915c05286a56ddee130a961d608
X-Original-To: ietf-http-wg@w3.org
Subject: Re: #496: Feedback on Fallback
Archived-At: <http://www.w3.org/mid/14D199AC-EE5D-452A-B293-4E195374882E@redhat.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/27495
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>

I’m in favor of fixing this, for whatever that’s worth.

On Oct 7, 2014, at 12:22 PM, Mike Bishop <Michael.Bishop@microsoft.com> wrote:

> Rob pointed out the higher-layer question here, which I didn't address.  It's really a discussion of whether HTTP/2 can be on by default or not, because we have to deal with existing apps.  If it requires explicit opt-in from the server app, which confirm it's using only h2-ready APIs, then we can't turn HTTP/2 on until either all apps are marked as h2-ready (essentially never) or we've shimmed our entire API set to be transparently h2-ready (not quick).  That's going to apply to any general-purpose platform, and it's going to slow adoption.
> 
> Having a fallback mechanism means we can make *most* of the API surface h2-ready and turn it on by default, because there's a graceful way to handle when there's a gap.  What those gaps are will change (shrink) over time, but a graceful fallback means earlier and broader deployment.
> 
> -----Original Message-----
> From: Mike Bishop [mailto:Michael.Bishop@microsoft.com] 
> Sent: Tuesday, October 7, 2014 7:56 AM
> To: Eliot Lear; Mark Nottingham; HTTP Working Group
> Subject: RE: #496: Feedback on Fallback
> 
> That's certainly a possible direction we could take the API, but we'd still need a way to communicate that to the client over the wire.  This proposal would allow us to communicate if the server developer wants to push them down to 1.1.
> 
> -----Original Message-----
> From: Eliot Lear [mailto:lear@cisco.com] 
> Sent: Monday, October 6, 2014 11:56 PM
> To: Mark Nottingham; HTTP Working Group
> Cc: Mike Bishop
> Subject: Re: #496: Feedback on Fallback
> 
> Just a question:
> 
> Why not offer the developer the choice to go to 1.1, especially if using raw interfaces?  You could even update your API so that the call requires an HTTP version #.
> 
> Eliot
> 
> 
> On 10/7/14, 8:30 AM, Mark Nottingham wrote:
>> There hasn't been much feedback on this. 
>> 
>> Any more comments on Mike's proposal (specifically, <https://github.com/MikeBishop/http2-spec/commit/cebb0385f188ddcaf75ec3a7811b836c770e7fdb>)?
>> 
>> Regards,
>> 
>> 
>> On 23 Sep 2014, at 5:24 am, Mike Bishop <Michael.Bishop@microsoft.com> wrote:
>> 
>>> Just to recap this suggestion, we’re not suggesting that any class of traffic should be bulk-relegated to HTTP/1.1 – we’re suggesting the addition of a widely-recognized error code to smooth transitions.  Burning a round-trip isn’t ideal, but it’s a mitigation strategy for limitations on either the client or the server.  In particular, a later thread (http://lists.w3.org/Archives/Public/ietf-http-wg/2014JulSep/1894.html) raised the use of such an error code in a GOAWAY as a good hard-coded response to a client that attempts to connect with prior knowledge and gets it wrong.  A server that’s aware of HTTP/2 but doesn’t support it can generate an appropriate GOAWAY and close the connection.
>>> 
>>> I submitted a pull request adding the error code at https://github.com/http2/http2-spec/pull/599 -- are there any comments on this change or is this editor-ready?
>>> 
>>> From: Mike Bishop
>>> Sent: Thursday, August 14, 2014 3:56 PM
>>> To: HTTP Working Group
>>> Subject: Feedback on Fallback
>>> 
>>> Going into WGLC, we committed to implementations and taking changes based solely on implementation experience and real-world data.  Based on our experience so far, Microsoft’s first piece of WGLC feedback is to replace Mark’s Over-Version draft with an error code in the spec.  Our reasoning follows.
>>> 
>>> As we continue to work on HTTP/2, one item that has come up repeatedly is the need to force clients back to HTTP/1.1 for various reasons.  We’ve all pushed hard against bulk-relegating any class of HTTP usage into the “They should just use 1.1” bucket, but it’s becoming clear that there will occasionally be situations where a server needs a client to fall back.
>>> 
>>> Some apps we support depend on the ability to emit raw HTTP protocol text.  Others require client certs as a matter of local law and we don’t have a way to retrieve the client cert without renegotiation.  Others are strictly situational, features that require adaptation work we haven’t gotten to yet.
>>> 
>>> These assorted situations motivated the Over-Version draft which Mark published after the NYC Interim.  505 was already defined as meaning the server was unable/unwilling to use the current HTTP version to serve the request the client made; Mark’s draft added semantics to inform a client what version would be acceptable, if any, so that an intelligent client could transparently retry over the correct HTTP version (be it 1.1 or 3.5).
>>> 
>>> We’ve found a couple limitations with this approach:
>>> ·         As Jeff pointed out in NYC, returning a 5XX looks bad in server logs.  This isn’t actually a server “failure” per se, we just used it because the status code already exists in the 5XX range.  Not a technical issue, but definitely an operational one.  (Jeff noted in NYC that there are other 5XX status codes that Twitter non-standardly recasts in other ranges for this reason.  New 4XX and 3XX codes were proposed as part of this discussion, demonstrating that the concept doesn’t bucket well as a status code.)
>>> ·         Once the HEADERS frame with :status is sent, we’re locked in to that response.  You can’t subsequently change the :status to 505.  Some of these situations can occur when the response is partially-generated, which leaves us stuck unless we buffer all responses until they’re complete (unacceptable for perf).
>>> ·         Because Over-Version is optional, clients are not guaranteed to support it.  An unsupporting client will just retry the same request over HTTP/2 again and never be able to obtain an actual response from the server.  Including a response body with the 505 telling clients to turn off HTTP/2 in their browser is definitely not a direction we want to go in these situations, and I don’t expect clients to have a “turn off HTTP/2 for this request only” button.
>>> 
>>> On the other hand, a new error code doesn’t suffer from these issues.  A RST_STREAM can be sent at any point and doesn’t necessarily confuse existing heuristics.  A GOAWAY with the same error code provides a clean way for the server to transition a client to HTTP/1.1 entirely, if necessary.  If it’s in the base spec, we can be assured that any client will be able to understand it and respond appropriately.
>>> 
>>> Thus, we think an “HTTP/1.1 Required” error code will be a better option than proceeding with the Over-Version draft.
>> --
>> Mark Nottingham   https://www.mnot.net/
>> 
>> 
>> 
>> 
> 
> 

--
Jason T. Greene
WildFly Lead / JBoss EAP Platform Architect
JBoss, a division of Red Hat