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 C825F1A894A
 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>;
 Thu, 14 Aug 2014 16:00:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.569
X-Spam-Level: 
X-Spam-Status: No, score=-7.569 tagged_above=-999 required=5
 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5,
 RP_MATCHES_RCVD=-0.668, 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 HCPzSx5MKYkZ
 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>;
 Thu, 14 Aug 2014 16:00:38 -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 E6ABB1A88EB
 for <httpbisa-archive-bis2Juki@lists.ietf.org>;
 Thu, 14 Aug 2014 16:00:28 -0700 (PDT)
Received: from lists by frink.w3.org with local (Exim 4.72)
 (envelope-from <ietf-http-wg-request@listhub.w3.org>)
 id 1XI3xJ-0005Lm-UY
 for ietf-http-wg-dist@listhub.w3.org; Thu, 14 Aug 2014 22:57:13 +0000
Resent-Date: Thu, 14 Aug 2014 22:57:13 +0000
Resent-Message-Id: <E1XI3xJ-0005Lm-UY@frink.w3.org>
Received: from maggie.w3.org ([128.30.52.39])
 by frink.w3.org with esmtp (Exim 4.72)
 (envelope-from <Michael.Bishop@microsoft.com>) id 1XI3wq-0005Ke-HL
 for ietf-http-wg@listhub.w3.org; Thu, 14 Aug 2014 22:56:44 +0000
Received: from mail-bn1lp0141.outbound.protection.outlook.com
 ([207.46.163.141] helo=na01-bn1-obe.outbound.protection.outlook.com)
 by maggie.w3.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
 (Exim 4.72) (envelope-from <Michael.Bishop@microsoft.com>)
 id 1XI3wo-0006HU-CK
 for ietf-http-wg@w3.org; Thu, 14 Aug 2014 22:56:44 +0000
Received: from BL2PR03MB132.namprd03.prod.outlook.com (10.255.230.24) by
 BL2PR03MB129.namprd03.prod.outlook.com (10.255.230.20) with Microsoft SMTP
 Server (TLS) id 15.0.1010.18; Thu, 14 Aug 2014 22:56:14 +0000
Received: from BL2PR03MB132.namprd03.prod.outlook.com ([169.254.9.215]) by
 BL2PR03MB132.namprd03.prod.outlook.com ([169.254.9.215]) with mapi id
 15.00.1005.008; Thu, 14 Aug 2014 22:56:14 +0000
From: Mike Bishop <Michael.Bishop@microsoft.com>
To: HTTP Working Group <ietf-http-wg@w3.org>
Thread-Topic: Feedback on Fallback
Thread-Index: Ac+4EKcMsRBYwrwPRqiO9BW4OtDgTg==
Date: Thu, 14 Aug 2014 22:56:14 +0000
Message-ID: <72fd1f4155804e7ab2f08dfed688fe5f@BL2PR03MB132.namprd03.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [2001:4898:80e8:ee31::2]
x-microsoft-antispam: BCL:0;PCL:0;RULEID:;UriScan:;
x-forefront-prvs: 03030B9493
x-forefront-antispam-report: SFV:NSPM;
 SFS:(199003)(189002)(107046002)(107886001)(83072002)(87936001)(86612001)(95666004)(16236675004)(85852003)(2656002)(21056001)(46102001)(76482001)(31966008)(110136001)(229853001)(4396001)(92566001)(86362001)(77096002)(99286002)(105586002)(33646002)(106356001)(15975445006)(19580395003)(19617315012)(19625215002)(76576001)(101416001)(54356999)(50986999)(74316001)(19300405004)(77982001)(79102001)(85306004)(99396002)(83322001)(74502001)(74662001)(108616004)(64706001)(80022001)(81542001)(15202345003)(20776003)(81342001)(24736002)(3826002);
 DIR:OUT; SFP:; SCL:1; SRVR:BL2PR03MB129;
 H:BL2PR03MB132.namprd03.prod.outlook.com; FPR:; MLV:sfv; PTR:InfoNoRecords;
 A:1; MX:1; LANG:en; 
Content-Type: multipart/alternative;
 boundary="_000_72fd1f4155804e7ab2f08dfed688fe5fBL2PR03MB132namprd03pro_"
MIME-Version: 1.0
X-OriginatorOrg: microsoft.onmicrosoft.com
Received-SPF: pass client-ip=207.46.163.141;
 envelope-from=Michael.Bishop@microsoft.com;
 helo=na01-bn1-obe.outbound.protection.outlook.com
X-W3C-Hub-Spam-Status: No, score=-3.1
X-W3C-Hub-Spam-Report: AWL=-3.088, HTML_MESSAGE=0.001,
 RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001
X-W3C-Scan-Sig: maggie.w3.org 1XI3wo-0006HU-CK 094d520d0c92a7a7ab35146f16211b88
X-Original-To: ietf-http-wg@w3.org
Subject: Feedback on Fallback
Archived-At: <http://www.w3.org/mid/72fd1f4155804e7ab2f08dfed688fe5f@BL2PR03MB132.namprd03.prod.outlook.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/26599
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>

--_000_72fd1f4155804e7ab2f08dfed688fe5fBL2PR03MB132namprd03pro_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Going into WGLC, we committed to implementations and taking changes based s=
olely on implementation experience and real-world data.  Based on our exper=
ience so far, Microsoft's first piece of WGLC feedback is to replace Mark's=
 Over-Version draft<http://tools.ietf.org/html/draft-nottingham-http-over-v=
ersion-00> 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 t=
he need to force clients back to HTTP/1.1 for various reasons.  We've all p=
ushed hard against bulk-relegating any class of HTTP usage into the "They s=
hould just use 1.1" bucket, but it's becoming clear that there will occasio=
nally 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 w=
ay 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 publi=
shed 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 t=
he client made; Mark's draft added semantics to inform a client what versio=
n would be acceptable, if any, so that an intelligent client could transpar=
ently 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 l=
ogs.  This isn't actually a server "failure" per se, we just used it becaus=
e 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 t=
his 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 t=
hat response.  You can't subsequently change the :status to 505.  Some of t=
hese situations can occur when the response is partially-generated, which l=
eaves us stuck unless we buffer all responses until they're complete (unacc=
eptable for perf).

*         Because Over-Version is optional, clients are not guaranteed to s=
upport it.  An unsupporting client will just retry the same request over HT=
TP/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 situa=
tions, and I don't expect clients to have a "turn off HTTP/2 for this reque=
st only" button.

On the other hand, a new error code doesn't suffer from these issues.  A RS=
T_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 unders=
tand it and respond appropriately.

Thus, we think an "HTTP/1.1 Required" error code will be a better option th=
an proceeding with the Over-Version draft.


--_000_72fd1f4155804e7ab2f08dfed688fe5fBL2PR03MB132namprd03pro_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:#0563C1;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:#954F72;
	text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
	{mso-style-priority:34;
	margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:.5in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri","sans-serif";}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
/* List Definitions */
@list l0
	{mso-list-id:1907063705;
	mso-list-type:hybrid;
	mso-list-template-ids:-541568860 67698689 67698691 67698693 67698689 67698=
691 67698693 67698689 67698691 67698693;}
@list l0:level1
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:Symbol;}
@list l0:level2
	{mso-level-number-format:bullet;
	mso-level-text:o;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:"Courier New";}
@list l0:level3
	{mso-level-number-format:bullet;
	mso-level-text:\F0A7;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:Wingdings;}
@list l0:level4
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:Symbol;}
@list l0:level5
	{mso-level-number-format:bullet;
	mso-level-text:o;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:"Courier New";}
@list l0:level6
	{mso-level-number-format:bullet;
	mso-level-text:\F0A7;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:Wingdings;}
@list l0:level7
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:Symbol;}
@list l0:level8
	{mso-level-number-format:bullet;
	mso-level-text:o;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:"Courier New";}
@list l0:level9
	{mso-level-number-format:bullet;
	mso-level-text:\F0A7;
	mso-level-tab-stop:none;
	mso-level-number-position:left;
	text-indent:-.25in;
	font-family:Wingdings;}
ol
	{margin-bottom:0in;}
ul
	{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-US" link=3D"#0563C1" vlink=3D"#954F72">
<div class=3D"WordSection1">
<p class=3D"MsoNormal">Going into WGLC, we committed to implementations and=
 taking changes based solely on implementation experience and real-world da=
ta.&nbsp; Based on our experience so far, Microsoft&#8217;s first piece of =
WGLC feedback is to replace Mark&#8217;s
<a href=3D"http://tools.ietf.org/html/draft-nottingham-http-over-version-00=
">Over-Version draft</a> with an error code in the spec.&nbsp; Our reasonin=
g follows.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">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 variou=
s reasons.&nbsp; We&#8217;ve all pushed hard against bulk-relegating any cl=
ass of HTTP usage into the &#8220;They should just
 use 1.1&#8221; bucket, but it&#8217;s becoming clear that there will occas=
ionally be situations where a server needs a client to fall back.<o:p></o:p=
></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">Some apps we support depend on the ability to emit r=
aw HTTP protocol text.&nbsp; Others require client certs as a matter of loc=
al law and we don&#8217;t have a way to retrieve the client cert without re=
negotiation.&nbsp; Others are strictly situational,
 features that require adaptation work we haven&#8217;t gotten to yet.<o:p>=
</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">These assorted situations motivated the Over-Version=
 draft which Mark published after the NYC Interim.&nbsp; 505 was already de=
fined as meaning the server was unable/unwilling to use the current HTTP ve=
rsion to serve the request the client made;
 Mark&#8217;s draft added semantics to inform a client what version <i>woul=
d</i> be acceptable, if any, so that an intelligent client could transparen=
tly retry over the correct HTTP version (be it 1.1 or 3.5).<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">We&#8217;ve found a couple limitations with this app=
roach:<o:p></o:p></p>
<p class=3D"MsoListParagraph" style=3D"text-indent:-.25in;mso-list:l0 level=
1 lfo1"><![if !supportLists]><span style=3D"font-family:Symbol"><span style=
=3D"mso-list:Ignore">&middot;<span style=3D"font:7.0pt &quot;Times New Roma=
n&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>As Jeff pointed out in NYC, returning a 5XX =
looks bad in server logs.&nbsp; This isn&#8217;t actually a server &#8220;f=
ailure&#8221; per se, we just used it because the status code already exist=
s in the 5XX range.&nbsp; Not a technical issue, but definitely
 an operational one.&nbsp; (Jeff noted in NYC that there are other 5XX stat=
us codes that Twitter non-standardly recasts in other ranges for this reaso=
n.&nbsp; New 4XX and 3XX codes were proposed as part of this discussion, de=
monstrating that the concept doesn&#8217;t bucket
 well as a status code.)<o:p></o:p></p>
<p class=3D"MsoListParagraph" style=3D"text-indent:-.25in;mso-list:l0 level=
1 lfo1"><![if !supportLists]><span style=3D"font-family:Symbol"><span style=
=3D"mso-list:Ignore">&middot;<span style=3D"font:7.0pt &quot;Times New Roma=
n&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Once the HEADERS frame with :status is sent,=
 we&#8217;re locked in to that response.&nbsp; You can&#8217;t subsequently=
 change the :status to 505.&nbsp; Some of these situations can occur when t=
he response is partially-generated, which leaves us stuck
 unless we buffer all responses until they&#8217;re complete (unacceptable =
for perf).<o:p></o:p></p>
<p class=3D"MsoListParagraph" style=3D"text-indent:-.25in;mso-list:l0 level=
1 lfo1"><![if !supportLists]><span style=3D"font-family:Symbol"><span style=
=3D"mso-list:Ignore">&middot;<span style=3D"font:7.0pt &quot;Times New Roma=
n&quot;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]>Because Over-Version is optional, clients ar=
e not guaranteed to support it.&nbsp; An unsupporting client will just retr=
y the same request over HTTP/2 again and never be able to obtain an actual =
response from the server.&nbsp; Including
 a response body with the 505 telling clients to turn off HTTP/2 in their b=
rowser is definitely not a direction we want to go in these situations, and=
 I don&#8217;t expect clients to have a &#8220;turn off HTTP/2 for this req=
uest only&#8221; button.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">On the other hand, a new error code doesn&#8217;t su=
ffer from these issues.&nbsp; A RST_STREAM can be sent at any point and doe=
sn&#8217;t necessarily confuse existing heuristics.&nbsp; 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.&nbsp; If it&#8217;=
s in the base spec, we can be assured that any client will be able to under=
stand it and respond appropriately.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">Thus, we think an &#8220;HTTP/1.1 Required&#8221; er=
ror code will be a better option than proceeding with the Over-Version draf=
t.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
</body>
</html>

--_000_72fd1f4155804e7ab2f08dfed688fe5fBL2PR03MB132namprd03pro_--

