Handling H3_REQUEST_REJECTED

Geoffrey Kizer <Geoffrey.Kizer@microsoft.com> Wed, 01 September 2021 23:37 UTC

Return-Path: <Geoffrey.Kizer@microsoft.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6F0453A1E00 for <quic@ietfa.amsl.com>; Wed, 1 Sep 2021 16:37:57 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.543
X-Spam-Level:
X-Spam-Status: No, score=-2.543 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.452, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, T_SPF_HELO_TEMPERROR=0.01] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=microsoft.com
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 nDSfSwZxqmZG for <quic@ietfa.amsl.com>; Wed, 1 Sep 2021 16:37:53 -0700 (PDT)
Received: from outbound.mail.eo.outlook.com (mail-oln040093008001.outbound.protection.outlook.com [40.93.8.1]) (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 9A5FD3A1E03 for <quic@ietf.org>; Wed, 1 Sep 2021 16:37:53 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JMQEZfkY4b4mvtwqPvF984vFdoxJIxIfesVBleBDFdOvM7qluLoQtbRTkH0nq1U1lgEGmfIp1EteQmpdLqznHIlIWAX0HndfsSGOR1oZ9IoHM2QjqgaQWm0bdiUZZsG3o4w97KUYc57u9eF36v1CVKhNlv1fn3w4ZwKwbUdwTrFIsqtA7jgEZ3XOwJTosvMJbqo+Ywj4JgyQOLx99KM6w8+Y2YfnN1zWPXQMp4L1+Kny+SNsU4U+6tSv3xgZ7NcJ0VA0g0HNV3AO1CE9m/9FwzddkLhNbosobqCLHr54RdTYZElfxRQbe17C2JGYvxGf38Nc1Qc/HGKWzvR43b8z2Q==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=xHO1IrVTjhS0Av1EapruQykEAp0aET3NtdRZJCC2ZDs=; b=m4tVF781iBgPJUA9O033oZ6thFSNYQVTVfMGxBiqyfzHDZA460julRwvzSCRtNFUwHEnhvTTxXi87OTbNFMf7PYzmoTqWZEQIdNad8zSZgmy9xJma9bZ20DhJ+MNQk1y2bVLekZLJ5UNdGGCLkNHcMTp6qzQTonMIYQHlZiKaoWHGYXKT5/LSDu2ZxoJhjveVdE6uuvE1zxvD2PFcBWVnGRcFQ/Zntqtv8JzXiluqMXhKRkOYqzWX+jpZU8x0F7Wtl2FZWxTgvhoZTNCi5ydoiqNMW9C9+qyo9g0NiovCVFJB41oxSwc14+Dxmi39lsIEEhaRaOuSmFdgyA6fye+Yw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xHO1IrVTjhS0Av1EapruQykEAp0aET3NtdRZJCC2ZDs=; b=MkymXhu+Wbx9AL1qkIYo0NgpLgvaZvfak8tnFodnjB263H42W4lVoHhTKEYYJ+R5g1nJcXQv1ZJuSDIEAmag64tOmT6M1wW4NZFS+SIyFViE8Zxz3d00fmrhsHJgleF76PTgeILFBsHCCvG12A0dBj+17BPf91m9wg59ApZNQl0=
Received: from CO1PR21MB1297.namprd21.prod.outlook.com (2603:10b6:303:160::6) by MWHPR21MB0480.namprd21.prod.outlook.com (2603:10b6:300:ec::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4500.5; Wed, 1 Sep 2021 23:37:51 +0000
Received: from CO1PR21MB1297.namprd21.prod.outlook.com ([fe80::412c:91d7:2f22:3493]) by CO1PR21MB1297.namprd21.prod.outlook.com ([fe80::412c:91d7:2f22:3493%3]) with mapi id 15.20.4500.003; Wed, 1 Sep 2021 23:37:51 +0000
From: Geoffrey Kizer <Geoffrey.Kizer@microsoft.com>
To: "quic@ietf.org" <quic@ietf.org>
Subject: Handling H3_REQUEST_REJECTED
Thread-Topic: Handling H3_REQUEST_REJECTED
Thread-Index: AdefiPoXow5BOF6xQ8mdOg9pz2Uokg==
Date: Wed, 1 Sep 2021 23:37:51 +0000
Message-ID: <CO1PR21MB1297190262751501A02E577B83CD9@CO1PR21MB1297.namprd21.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ActionId=d46cacd6-1cfb-4a16-9ef8-638936a6d0d3; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=true; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=Internal; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2021-09-01T22:35:08Z; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;
authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: d1253f4f-4ffd-450e-b062-08d96da1839d
x-ms-traffictypediagnostic: MWHPR21MB0480:
x-microsoft-antispam-prvs: <MWHPR21MB0480C3CE86E76552DB33856983CD9@MWHPR21MB0480.namprd21.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: sYuMP2S/BkdxWfNdGtPBA6GToAcsrAMYxyO1UDNDpBvmUOvjcIIir8bRmcDxozyzEdY9xcoGh6be+mbupcOEH+kBD5+3pK66+p7vGvKOnMaNW8kVuScj2Ap12K7DMC7kwpCKbDNmFIQrT1S0+AiTzdrzw/tfEFdpHhaYlXe6snrzRryfoFdu4jzAxaAbrv+FVhXrc2NDxbe4BBO5Y/jnETHZEzgI9IiT4qGoAqBdeZ4RyJdK11stOIsj5ZY0pSA5esbj7bs2A0PdwIP3Lbze54332dJJ/+JIlnHeJRUi51N9IekUwBn/j4LMVR9kgzaDtLMHVYeM6ZP25Uykw0xF3+TREQkxZUoqk91RVZCnkrhjdCPvtVrOEGfcmBXCMg7PmxwiqgRA2Rjo87wdTQfV3gAG9CoSUiDCq+jXdi+mRZYW0YMpSNXb0FyeZ+EVhM09dbnQUCpJoRYahGPg5sPqrNocKzkofCRpzewSP4gozefyrdohYjmrwBraMcKvZeaY/xFU+AwiNTibb4CCajci6gPoS6FF05I8DBAmlI9+KMuzHp96LjAKHVAfMnTGKCTrqx3ezJf8Zu33t9FexTzQN9+CI4FFK/FNXt5WRsn7U3L80lX+TcejkzWlTnTZuwbfSLywM/q9Zv+dWBqxv+YwB7zqxmj3u45O9Q+m1CN5+ex75pX8nuTGkwtOFmg71yr/hDsL2HYUHC+btHJoprLgBg==
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO1PR21MB1297.namprd21.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(38070700005)(55016002)(186003)(7696005)(66446008)(8676002)(316002)(82950400001)(2906002)(82960400001)(10290500003)(86362001)(26005)(9686003)(52536014)(7116003)(55236004)(122000001)(33656002)(66946007)(76116006)(5660300002)(508600001)(8936002)(6916009)(6506007)(8990500004)(38100700002)(66476007)(66556008)(83380400001)(71200400001)(64756008); DIR:OUT; SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?bZyEZJ7UHlPl2dcgN8ppsPmE2Apm/SPWeACIAKCohsINfz7FBQKRux81ZIrN?= =?us-ascii?Q?NdlQ1hJhG/DEBRowMQMftnqkljN8wbXAY09a2PSkNhB5PCaDFb0YcgPmgWPr?= =?us-ascii?Q?vZQytaGOdMjDnmfk+4l06YliWSkllz40cF1APTIyQ3M6nzKcviTy4AY7q5Jq?= =?us-ascii?Q?oL+sxS5g76UHu3Px5xREBuUCH6ihS07pcDetqBwk7Y8Urq+y53gK7/7hE2IB?= =?us-ascii?Q?f5Q9ghnlH43UrYOz9NCa0QgjeVBjq5sVH6eG3oXPN+yeXxS40wIh2dTljfIn?= =?us-ascii?Q?ogCOVaIuUAq5aOHJF59CGnkkEHKZzRbb2Adv0QZMeoA+YcpQmooXJvgSqO5m?= =?us-ascii?Q?7vdL4dX4Lq/tq4K1ITtOwcFZjJql3dNIzVM7cLv5VHkzGCEzcPXeQLPBLWvZ?= =?us-ascii?Q?xEj8J+9vEv8LNWn18ASov9WqUvdqKbkhTXlxY7fWsdlCs6cLwwYW26xIGMsW?= =?us-ascii?Q?BKiCmZTs0b8WpL2xzmANNgOJeulwlSTwakkMTNJElkajpQAYFe/Y9TUbcEyr?= =?us-ascii?Q?NK6s828zOW4jks8RCSNmlO5UMDbWy2VladUBIYAigDpVJCLckqV+IOZfLVXB?= =?us-ascii?Q?MLU84nZca/htj3Ti+Ss1U+mnyisIt5XUIZ55ZJdvOD/xmNqi+hKLE5P5IOyd?= =?us-ascii?Q?s4z2QcTzC5+DaEx5gyA6JCrfEYeGzUwz1gQcnzLhXIKQIWN4ekn5gxgN8Go6?= =?us-ascii?Q?BXe9cDi+JxoHVcXKbAoVZIZXjltooKdG+Ub3FJD+GbP19xcbTH2Om2ywiPKa?= =?us-ascii?Q?7epLPLsnefTs34qA089XLm3Uq1TnETdf4RIosrxV9ZWMWc1TnPOkPBk70AtS?= =?us-ascii?Q?spFA/JO7i82d0GdUG6PPe+HCeYgSbYgNe81spxEWEx9PczqnjCMJv9+GoYqo?= =?us-ascii?Q?6J7qHFuPKIl4t5mcMd1w2sMxzV89P2q7hY7iKlICJrwwfV76JExSsBtH63X9?= =?us-ascii?Q?nmvgGsZiYqsvIXnfVHgT5Ut/lIuFdBfLDdZVbHjq8IBfEai7N6rOsdsmDtEs?= =?us-ascii?Q?cJEuMLVhP9scEgLyCQMmg2gWYrRVjBqobbTJujwaSMk8OzK4COdYCKeuKLQG?= =?us-ascii?Q?I+HxJogbRL8mqx+POuttKDQGtjDhPZvTsCKeWPolQEdMYZhuU/S/GrGpVSwA?= =?us-ascii?Q?0gt4txZfNj7MigHwe6ip8spfmkX1t/SjIpxTnHmbt6Vjtcsc7NJNFS/xAQT9?= =?us-ascii?Q?5MWKldtbQubouspQWsVJplnTE1d67wG+fu0g5vSzIRxP3NED8+25GtRdE0+Y?= =?us-ascii?Q?eI/XV6Np/iOxRL0kG8u6TOnc+igKSAV5KIjGnyHf4j4r3M0Gp+F1NZkvTtcv?= =?us-ascii?Q?iMAUS4Vgh2Zx8ZQC4BArAD01?=
x-ms-exchange-transport-forked: True
Content-Type: multipart/alternative; boundary="_000_CO1PR21MB1297190262751501A02E577B83CD9CO1PR21MB1297namp_"
MIME-Version: 1.0
X-OriginatorOrg: microsoft.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: CO1PR21MB1297.namprd21.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: d1253f4f-4ffd-450e-b062-08d96da1839d
X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Sep 2021 23:37:51.4141 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 0AZA6KbCZIls+mcFlWEn2mcmcQe0JjPfnh7wf/F0XHHZjTiVWV7wYcjQK0/chiLeKu2p/FGd1u029fKwSxb27uXn4cwCbzLrsJ+ngXD+XjQ=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR21MB0480
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/a_hvNC0kliW94iidcj2W9BVnl_8>
X-Mailman-Approved-At: Wed, 01 Sep 2021 20:42:57 -0700
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 01 Sep 2021 23:39:04 -0000

It is often unclear what action an HTTP3 client should take when it receives H3_REQUEST_REJECTED.

>From the standard:

When the server cancels a request without performing any application processing, the request is considered "rejected." The server SHOULD abort its response stream with the error code H3_REQUEST_REJECTED. In this context, "processed" means that some data from the stream was passed to some higher layer of software that might have taken some action as a result. The client can treat requests rejected by the server as though they had never been sent at all, thereby allowing them to be retried later.

So when a client receives H3_REQUEST_REJECTED, it *can* retry the request. But it is often not clear *how* to retry the request, because the client has no information about *why* the request was rejected, nor about the circumstances under which retrying the request might succeed instead of simply being rejected again.

If the client has already received a GOAWAY on the connection, then it seems reasonable to conclude that the request was rejected because the connection is going away, and the client should retry the request on another connection.

But if the client hasn't received a GOAWAY on the connection, then it is not clear what to do.

One possibility is that the connection is going away, but the client has not received or processed the GOAWAY message yet. In fact, this seems quite likely, since the standard states that upon sending GOAWAY, a server should reject requests that the GOAWAY has indicated will not be handled. Since there is no guaranteed ordering across receipt and processing of the GOAWAY message and the request rejections, the latter will be processed before the former in some cases. In this case, retrying on the current connection is pointless and wasteful since the retry will simply be rejected again.

Another possibility is described in the standard: An intermediary can choose to map an HTTP2 REFUSED_STREAM error to HTTP3 H3_REQUEST_REJECTED. (Presumably it could do something similar with HTTP/1.1 requests as well.) In this case, retrying the request immediately on the current connection (or any valid connection) is often the right action to take, since it allows the intermediary to determine if and how to forward the request so that it will not be rejected again.

It seems like there are many other possibilities as well, given the broad definition of H3_REQUEST_REJECTED. For example, the physical server itself may be shutting down, but other connections to the same endpoint (but different physical servers) may still be available to process the request. Or, the server may be temporarily unavailable, but is expected to be available again after some period of time. Without some information about why the request was rejected, the client cannot choose an appropriate retry strategy.

Is there any guidance about how a client should handle H3_REQUEST_REJECTED in general?

Could/should the standard be enhanced to provide more information about why a request was rejected, to allow a client to choose a better retry strategy?

Thanks
Geoff