Re: POST+Upgrade, or unexpected limitation of RFC8441

Ben Schwartz <bemasc@meta.com> Wed, 18 December 2024 19:30 UTC

Received: by ietfa.amsl.com (Postfix) id 47DD1C1CAE67; Wed, 18 Dec 2024 11:30:14 -0800 (PST)
Delivered-To: ietfarch-httpbisa-archive-bis2juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 46F0CC19330B for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Wed, 18 Dec 2024 11:30:14 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.855
X-Spam-Level:
X-Spam-Status: No, score=-2.855 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.25, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=w3.org header.b="TR1DOl77"; dkim=pass (2048-bit key) header.d=w3.org header.b="K6xDLDkx"; dkim=pass (2048-bit key) header.d=meta.com header.b="elmjnAYC"
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id FN2Fyj0N0KVI for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Wed, 18 Dec 2024 11:30:10 -0800 (PST)
Received: from mab.w3.org (mab.w3.org [IPv6:2600:1f18:7d7a:2700:d091:4b25:8566:8113]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 524B6C1840DD for <httpbisa-archive-bis2Juki@ietf.org>; Wed, 18 Dec 2024 11:30:10 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=w3.org; s=s1; h=Subject:MIME-Version:Content-Type:In-Reply-To:References:Message-ID: Date:CC:To:From:Reply-To; bh=2n1i8t5GXe+Lhz8pDs81abeqdLMSZn9LucV4zyMCKbM=; b= TR1DOl77e1lPqFbdfsWgKO2ERasYtWSuV57H7mYQGElW5bw5Orn6p/r3zK5SROg10ckTQU0ZsJCuM mGEWARkhAVXDWx6g+ggh1EashIehVRzwBhmFDTOYUiSTmbCYG9Eof+I1O307pveY2rIC76abaJzF8 H6LrvyYZi1og3srri5IIsFJV75kB8ydl6NBBIXSWSZ+VZWRBrMqqDBYzTxoMh0/qj+1L0Hw2YH4ch oLUYSKe5NoEFHklrJNCzNPXV7wlZmEomE+QX0eREhLkyQ1ka7AF5feGzcn0aIpDMoOKuQ+T7jC18v AxgLZ/LdS3dKqAgqyxkhO1lzyBqEf8UZfw==;
Received: from lists by mab.w3.org with local (Exim 4.96) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1tNzjS-001Yt0-1J for ietf-http-wg-dist@listhub.w3.org; Wed, 18 Dec 2024 19:29:18 +0000
Resent-Date: Wed, 18 Dec 2024 19:29:18 +0000
Resent-Message-Id: <E1tNzjS-001Yt0-1J@mab.w3.org>
Received: from ip-10-0-0-224.ec2.internal ([10.0.0.224] helo=puck.w3.org) by mab.w3.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from <prvs=70822aa5b4=bemasc@meta.com>) id 1tNzjQ-001Yrz-1R for ietf-http-wg@listhub.w3.internal; Wed, 18 Dec 2024 19:29:16 +0000
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=w3.org; s=s1; h=MIME-Version:Content-Type:In-Reply-To:References:Message-ID:Date: Subject:CC:To:From:Reply-To; bh=2n1i8t5GXe+Lhz8pDs81abeqdLMSZn9LucV4zyMCKbM=; t=1734550156; x=1735414156; b=K6xDLDkxIxy22zxDvG+pvw2fVnNXIESYzxfo4S7JQ7tBNoZ NUk6sPe+dD0ppRRz37ZLYeGdZHQKp38Cjga6QjmODfqX4u1vw7XZ7gomhdN/v3tr6DvsE8JmLyFS/ 9Er+AeBwhQj7ANTy18nCTZScoluqgMyyv9FMhvqgDGZ1ZMYHBVHm1XA9Lv4GByFKTEXb+vJbfO9br fxrF3UG5kUjKADzCmWndvwK5IAsiW+14TwsxaxlNVG4YrrmfwKElgAU7FtkwBFnqmjSGOWb5d2bdi tzyJ6iHhMNUPkOn5TLCFqpOjWRWz8e6H64D0KeIgzRQjAoUkSN25zsm1EoRkasNw==;
Received-SPF: pass (puck.w3.org: domain of meta.com designates 67.231.153.30 as permitted sender) client-ip=67.231.153.30; envelope-from=prvs=70822aa5b4=bemasc@meta.com; helo=mx0a-00082601.pphosted.com;
Received: from mx0b-00082601.pphosted.com ([67.231.153.30] helo=mx0a-00082601.pphosted.com) by puck.w3.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from <prvs=70822aa5b4=bemasc@meta.com>) id 1tNzjP-005ARS-1m for ietf-http-wg@w3.org; Wed, 18 Dec 2024 19:29:16 +0000
Received: from pps.filterd (m0001303.ppops.net [127.0.0.1]) by m0001303.ppops.net (8.18.1.2/8.18.1.2) with ESMTP id 4BIJ1gWf028651; Wed, 18 Dec 2024 11:28:47 -0800
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=meta.com; h=cc :content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=s2048-2021-q4; bh=2n1i8t5GXe+Lhz8pDs81 abeqdLMSZn9LucV4zyMCKbM=; b=elmjnAYCZj389ct+NbcN8eGpMoLL097h1qx3 1uJZ4aDwmAr7pnVcANdpdONlV7J2qUUlR/LveQpMS4rIGLCq46MYapsUbsvuUQfx FACJw0jNROaRu3ffZLgekHxPndkPv4pTFswOt51Roof6IY1rwsso3X3ddryRsnI7 XCrbEhmcAtQmsQbyulj3OSsZunXnQ35IBMytQDVXHF7Vt58J8qxCJ+T4g1OlkFSB j3nAhdF4U4j+ekiEkW2vQrBlomUJxk5Qwp6Iscc6xPUFxxZcDYMcZEq8XSqQiWg9 IjmvG3tMlHEehK9wTQe+IDnHgYcezcK+fxgn9XFRoyLgsNG/dw==
Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2048.outbound.protection.outlook.com [104.47.55.48]) by m0001303.ppops.net (PPS) with ESMTPS id 43kx4sjymg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 18 Dec 2024 11:28:46 -0800 (PST)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pQ/XoKqKadUi+PCXevjcZucZ7CCb06IOlMsVkp444/41K9hjZB8YuRpRmk91LONMXl6BN60112oHZbgKb0OxJOEFFjbnjFS6oALVryhI405h1oZck5e+W8zI3p2TZvsvjPcimIz3TklCzGO7bt3OOPQP9vN/RbHcNEDO46tgw5egZC6qb3R6miNj5IdbxsnUhZO9pKBiG4gGWI3v2oCr9EEPSRSlx7IooAaqgUUdGyJboCAlpbARw8ldU7eCXR6oyZbfFeRmgo/pfWWwH/puHfP1XFbesmw+xxeZTY9V3u2RPZ60nYPi2gdcDiIxghvdA+q2vsSqZZwuf/inwz+f3w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xK+NWBqdfPGhoKNu8ZIiOl4Tl6/r3juecDCwRp2w+hA=; b=VwsDcRh5TyPuN3J+hD3oaok1zwxtnmrT4YgehUJkZL/Smefb7Di4HQ6Jsh+JysWdbhrU5oOMZHpYBxKn1joBVrVjwagSK9AIcwULjCv3SP4s0rInQzxmi7WXA1SQ/bZMUugfQs7zN8FLxEWiHl7E53sZzZFxYsHy/YU5b0/NBA2zi8NeOXSypPw1NzZZERwPtFfj7oPF155hbUhBFzJGzFSOFcEVuqyNIq+RaZLNFqN9dE/OVKqq7eeliksEDSG/AGH64CRcomvT7IDdCU+b9r9MG3XrktvwYg/69+tgZUht60vWPaMzN0uvXZbUo5wFG0qEAsEDirjtK1KS4tn7iA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=meta.com; dmarc=pass action=none header.from=meta.com; dkim=pass header.d=meta.com; arc=none
Received: from SA1PR15MB4370.namprd15.prod.outlook.com (2603:10b6:806:191::8) by BLAPR15MB3812.namprd15.prod.outlook.com (2603:10b6:208:276::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8272.12; Wed, 18 Dec 2024 19:28:42 +0000
Received: from SA1PR15MB4370.namprd15.prod.outlook.com ([fe80::b6dd:72cc:243a:babb]) by SA1PR15MB4370.namprd15.prod.outlook.com ([fe80::b6dd:72cc:243a:babb%7]) with mapi id 15.20.8272.005; Wed, 18 Dec 2024 19:28:41 +0000
From: Ben Schwartz <bemasc@meta.com>
To: Willy Tarreau <w@1wt.eu>, Glenn Strauss <gs-lists-ietf-http-wg@gluelogic.com>
CC: HTTP Working Group <ietf-http-wg@w3.org>, "mcmanus@ducksong.com" <mcmanus@ducksong.com>
Thread-Topic: POST+Upgrade, or unexpected limitation of RFC8441
Thread-Index: AQHbUTgaOeOLJAZed0mUaoT5DmSm5bLr5YQAgAAbaACAAF4x/A==
Date: Wed, 18 Dec 2024 19:28:41 +0000
Message-ID: <SA1PR15MB4370872301334B5CDCBBC6EBB3052@SA1PR15MB4370.namprd15.prod.outlook.com>
References: <20241218102834.GB2858@1wt.eu> <Z2K4mo6NKPxBKjl1@xps13> <20241218133520.GE2858@1wt.eu>
In-Reply-To: <20241218133520.GE2858@1wt.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA1PR15MB4370:EE_|BLAPR15MB3812:EE_
x-ms-office365-filtering-correlation-id: 2476bf37-75f9-4579-9a07-08dd1f9a2e07
x-fb-source: Internal
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|8096899003|7053199007|38070700018;
x-microsoft-antispam-message-info: vgXBf/1NMuEKs2VMhRgZBtBKH7M+Ol+ztggb/MKCf7zC1IuCuM7SIlgRnDpUCHScfwF5/swwm9fV9OG2TuHYZNwHC8p5RJKQwHqo8vrZ3jM0xf0JeNTXdcpBeE8XGz7CcKyGq8NRJh78b1rqwR4MK88xQN+gFtgxQKcZfSJ18lDBwVC+KXVMwlADJM5YgePo5K6MUA1aZlFx3LisrR1JnAXzYTfsq27eb7FM0IXaXGi7ihSXKOWKop8YvaNKjON3maQ5RIIOPIywwhfaMe0XV2JkEWKyIrZbiQ6Tkubpek0Gsb85kc4Fw+oOuGTjZp4+TAMEu4qEGHwdB5Q/J8jgQk+FSYazaJaLUG/Gm57vMLQlzgHYIQa3CLk/yn5uyusEUztO/U1EpO6ej2BvHcigOnyr9xNcysFTRM78UH/Y/52pHqtcuDTEeUGlRBH970MaLotnVORr4H6t/G99W9aYHVxtSqePzdNCOpc8qj+nwTsYZ/wgJWmiVKnYjuO4pNJDpSvokl+UMlJLg8Zx/e4eQF3moz8ojTHbvi1uszC3JT2GZKAW7gY5VE+aCetaX1hb0dxSSzXdhcB7jgKLt6yEtcyGWQ5/PWr0c8uLpWalhK2F79J4FK+9C2kdC/wf+7pmYArM9LlNxUcBx+tIwBBk3en6OPwB01uIg5jeqpQ/loE57k5jbqno691whr5+d5/8rd87lchrAQB6Nx10jk1VCbH9e9Yb2WEu7yp6wYyVEvgos9y1zLp3pXaKyJZPM1+/Z9WPQ/e5P0alYZx9yMNEqA9g+Q4bSvgTkqk13D1OAFhfe52CqQM0vJVuot/6zfWR16NSxXX/EdfOROEOvOzOcc/1aYNesJU10Kylca5fg+V/dHyPzXC+ewj2VpktDI64vTj00w5zOoxtQ2OFKmBLUmebLfTgFnLf+tnGhmTfAi/pxg9AdSUaSC2dK/vTop9cOR68mDqZIrZGVPYItUJWcFA30HBQdQZses1NBCgKOsS3G6t/69QhG+7O0FjaVsBbBijaVdX+5MvdHxTP44vp6iDhFTA6Fbe2uxk4PlY1nEgvmPQG6etY3bvH0M0p3VH3RLu17LZ40s+JHzQpnKx7EUUC33siAyllIiVGmWNR29MLF12yjmXLURhgHvmYj+ddYZPegjW2WPuVmwk2+lCc6n51fJQ8/YP3gUDylZMHYSXC+C8NZTnf/otxQPSpxhP+Zi4Z+tW6vocGR5Z9K6ZOkkpbMrDJlorhDRuPDT5y/+0nC9xug6uKqjfuHCj4QCiy2tTCmSmrUOljjCslcwORrOzNxD3e2O3NlZBUIgSQCa/y2rKW7MrOpm5Dpovk9NPV8G5XL6r2X2mrV0h7QTjnKRO4PMji5DFBrqq9JPzyHoG0vl0huYRKjtgaB+r4lD2L
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA1PR15MB4370.namprd15.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(10070799003)(1800799024)(8096899003)(7053199007)(38070700018);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: KKapRf73Yi9ni6pcwNDUjvuw9xbwugZlYuFSKlXtqPhTzJMlH0lMq/gsMkf1IciZ6vxNzY0OTqG+0e6Ks8HdNQ/u4VU5fFJL22N3B5GFe4aL6YJa6/CGQcGEIXapUXN+re4baIxsIa249PSOIiHfaoPNWCbjOb0hO8v/A4L+TSfSlOIxhpXQqkUTGS8CBGY6HD92aAnr/Ga5PdLrcV0GjDTCoT0psgOWqE9nJqDLO2wcGGStgYq1G86Ih7F7YVhf8WCxlkJQEcIL89CtQYvumfZs4XiQwErGNyBmnLI25yk0JjG15uhwM8p2kMsUiUDMghaKRsR63ORyGc6yqaCuu5Tzm0gHHrpzyv+BE5IZmJiDvv37LkOChke+J0sR27S3dYpOT0oiAiPI52e5uumNGQwx9cHk40mTK8vFAaPx8LKYR498fCDLYQzSAIn8vKEZ1DEEaWUaMnBNtXumuKG4cPwQ1brtul+Fnq2gDzdeiphUQ0uTuSWDht5nQuq1lMi3twB8ja6lsF/ou6HBTgRt7HVqVkaPFbvHvyydhjj5gzWCqjCIOHuQPVHRFv28mOMXVHAMIT9O97aDuNFRG+MGNCVEIK/ZLbeVIBhKfhbKSrOqigb6LuCXmD9uazK0uX+P+2JMk8n/J3G1m67XfAf8SVYRzJZ87KWRG//2KMsYk0dF6QOx/XHeWobVALXA1MfXMOEicFFSd3tNTKsn5UnjFKdD0rIDHatFOcyhr46h98iYc3UgFI7utKbJR/R7limkqMqlL54JFIztNmf7OGSTRInPbUJTi8aFS2Q1NfR0xDYUaZZI5Oe+PIlixyB4DRjYpaI/3foFkJmtvCkUNdfnYACrMLf5dYPP2KYWjRqsaxmx8Sm/xTZArkpN1Nnl1jzx8NnGStdUw/N7/xLIRv2vasrrP6S9AVTWh8NCCy52us36ZYQXryy95vO8yupHggtGB+CwtCLxQCFYs1tNwpkyIboWo0wMeKr1MDuGXK13XIak+P4OB5xsAHDy9/rZovXPcO0sNqpLIT4rPHq0qXUCO8AxE/6HftV3OD/Ki9eV/CRtIkWntDU6aHio+JqMA//zN3EXK7n9jMpU36YAQCdHQ0k526E2ETmuT0RbYDGD2uWiLwk6AUtQgnk+hfQNQV5YV57wmSIe0a4u6mGCkrXJIciPuSoOu4qYnBlsmUu8AMWONUJ9dZ7TiyGtEg5E73ARfZZqiYNNCLmf1iZfpNWS20GvHrOM0RG2bQqsgN30PS5INn5+tHGtzzXdP79TgY9uUgr8dRz06+j2SIWIjqtt8bxTeZ3CAj9lANXggYClwwEfWfH93QNBMVD6xrEid4qYGLr2PLDULNcF36cRU+gVmokiRx0ykS0whDIMKnWFu1znJR8h4nown2tpSjJSJYtUu1sx1rMUhWynUNoS9mpRLyhYslACRx6TZmlJztqfVXmdq+fy9Ge03karJ4dVQdjLAcdrd1RBcKBm2oO9S8z1+20tInRaDF8CMn3cDVcRPStzMOVBEiEjUvJCFd0iqf/7E1k242XNYQussfVTRTh6nUVY8xcnj0X4xQyZIq2cIetHdjVESLgTP7ZHYV6rc42W
Content-Type: multipart/alternative; boundary="_000_SA1PR15MB4370872301334B5CDCBBC6EBB3052SA1PR15MB4370namp_"
MIME-Version: 1.0
X-OriginatorOrg: meta.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA1PR15MB4370.namprd15.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 2476bf37-75f9-4579-9a07-08dd1f9a2e07
X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Dec 2024 19:28:41.3880 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: /05T9oMeuXgF6eShbVcR8G3p7bCKgFJVlMNlAyHZZGT6GA24OIT/7YWg776QDvY1
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR15MB3812
X-Proofpoint-GUID: sMMlbDgkN4Wul2AMh3ipVQYDTvtXgfVE
X-Proofpoint-ORIG-GUID: sMMlbDgkN4Wul2AMh3ipVQYDTvtXgfVE
X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1051,Hydra:6.0.680,FMLib:17.12.62.30 definitions=2024-10-05_03,2024-10-04_01,2024-09-30_01
X-W3C-Hub-DKIM-Status: validation passed: (address=prvs=70822aa5b4=bemasc@meta.com domain=meta.com), signature is good
X-W3C-Hub-Spam-Status: No, score=-4.1
X-W3C-Hub-Spam-Report: ARC_SIGNED=0.001, ARC_VALID=0.001, BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, DMARC_PASS=-0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, W3C_AA=-1, W3C_WL=-1
X-W3C-Scan-Sig: puck.w3.org 1tNzjP-005ARS-1m ab0f4d86855a9aaab0f54125df579e90
X-Original-To: ietf-http-wg@w3.org
Subject: Re: POST+Upgrade, or unexpected limitation of RFC8441
Archived-At: <https://www.w3.org/mid/SA1PR15MB4370872301334B5CDCBBC6EBB3052@SA1PR15MB4370.namprd15.prod.outlook.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/52661
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: <https://www.w3.org/email/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>

It seems like the underlying confusion here comes from two false (but understandable!) assumptions:

1. The ":protocol" pseudoheader's value is an Upgrade Token, so it can contain any Upgrade Token.
2. It is possible to convert HTTP/1.1 Upgrade to Extended CONNECT generically.

In fact, ":protocol" only supports a subset of the registered Upgrade Tokens (i.e. those that explicitly describe their use with Extended CONNECT), and even if an Upgrade Token is defined for use in both HTTP/1.1 Upgrade and Extended CONNECT, there is no generic process for converting between these forms without detailed knowledge of the specific Upgrade Token.

I wish it were otherwise.  And in fact, I think we could fix this for a subset of Upgrade Tokens (those that use the Capsule Protocol): https://datatracker.ietf.org/doc/html/draft-kb-capsule-conversion-00

That's not going to help you with whatever Docker is doing though.  Someone should tell them that "tcp" is not a registered Upgrade Token [1] and "h2c" is deprecated.

As for haproxy, it needs to restrict its HTTP Version Conversion logic to recognized Upgrade Tokens where the conversion logic is known to be correct.

--Ben Schwartz

[1] https://docs.docker.com/reference/api/engine/version/v1.47/#tag/Container/operation/ContainerAttach
________________________________
From: Willy Tarreau <w@1wt.eu>
Sent: Wednesday, December 18, 2024 8:35 AM
To: Glenn Strauss <gs-lists-ietf-http-wg@gluelogic.com>
Cc: HTTP Working Group <ietf-http-wg@w3.org>; mcmanus@ducksong.com <mcmanus@ducksong.com>
Subject: Re: POST+Upgrade, or unexpected limitation of RFC8441

Hi Glenn,

On Wed, Dec 18, 2024 at 06:57:14AM -0500, Glenn Strauss wrote:
> HTTP/1.1 Upgrade overloads the request.
>
> There is an HTTP 1.1 request and there is an HTTP/1.1 Upgrade request.
>
> If the Upgrade is not handled, the HTTP request proceeds.
>
> If the Upgrade is to be handled, then the request be must read in full
> prior to the Upgrade taking effect on data *after the full request*
> received from the client.  There is a danger here for exposure to
> request smuggling if various intermediaries handle or do not handle the
> request body differently.

I pretty much agree with all of this, and that's clearly the problem
here of switching to CONNECT which doesn't offer option for marking a
boundary on a request payload.

> Some of these issues were discussed earlier this year regarding
> Security Considerations for Optimistic Use of HTTP Upgrade
> https://urldefense.com/v3/__https://datatracker.ietf.org/doc/draft-schwartz-httpbis-optimistic-upgrade/__;!!Bt8RZUm9aw!74ic5DESaXPLq1JkO-MTfn1BE3voxl1MrOzJT0bZxUt6hv0gSOoT-EbqHAsvFw3tXir3$
> both on list and at the IETF meetings, e.g.
> https://urldefense.com/v3/__https://httpwg.org/wg-materials/ietf120/minutes.html*security-considerations-for-optimistic-use-of-http-upgrade----ben-schwartz__;Iw!!Bt8RZUm9aw!74ic5DESaXPLq1JkO-MTfn1BE3voxl1MrOzJT0bZxUt6hv0gSOoT-EbqHAsvFwNdML1v$
>
> (I think on the list) I made a suggestion that the draft limit future
> Upgrade tokens for use in requests *without* a request body and with
> idempotent HTTP request methods.
>
> I still feel that way and so for these reasons would oppose adding
> complexity to extend RFC8441 CONNECT to allow a request body.

I'm not strongly against that, it's just that we may be ossifying some
applications what will require H1 exclusively and forever. But hey, we
have set-cookie as well...

> Why does the docker engine API use POST along with Upgrade?

I have no idea. But I can understand how some implementors could
consider that they need to open a bidirectional channel not working
on HTTP boundaries, hence an upgrade, and that the initial context to
start with is passed as a message body. We could for example imagine
that some applications repost the last dumped state of the previous
session, which the gateway searches among all known servers, to route
the final tunnel request to the proper region/server. That's certainly
not the case here but there can be valid use cases (which technically
do work).

> HTTP POST method is not intrinsically idempotent.
> Would it not be better if the docker API sent the POST request, and
> separately, depending on success/failure of the POST request, sent
> an HTTP/1.1 Upgrade: websocket request via GET?

Or even the reverse, request first, then use their protocol to send the
data. But anyway I don't know their protocol and am not qualified to
judge their choice. Maybe in their context it's the best one.

> From my quick look in Moby, the open source repo for community Docker:
>
> Search for "Upgrade:" to see the examples
> Upgrade: tcp and Upgrade: h2c
> https://github.com/moby/moby/blob/master/api/swagger.yaml
>
> Since swagger.yaml mentions Upgrade: h2c, I'll note that lighttpd will
> ignore HTTP/1.1 Upgrade: h2c if there is a non-zero HTTP request body
> included with HTTP/1.1 Upgrade: h2c.  That is done to avoid the
> potential for request smuggling with HTTP/1.1 Upgrade: h2c.

Same here. Actually it's not just about smuggling, it's also about
bypassing everything (routing rules, filtering etc).

> At the moment, I do not know why Docker API is using POST instead of GET
> and if the POST even has a body, or if it happens to use
> Transfer-Encoding: chunked even in cases where it could explicitly use
> Content-Length: 0.

I don't know either, I don't even have these tools nor do I know how
to test them. And if we had to try each and every strangely behaving
application, it would require more people than are likely subscribed
to this list!

> >   [...] but the problem remains that the mechanism proposed by
> > RFC8441 doesn't offer provisions for completely transporting H1
> > over H2, nor replacing H1 with H2. [...]
>
> True.  Perhaps HTTP/1.1 RFCs should be updated to deprecate
> non-zero request body and use an idempotent method when including
> an Upgrade token with the request?  Similar to your last suggestion:
>
> >   - or we could do nothing and consider that some parts of HTTP/1 will
> >     remain HTTP/1 forever and will not be transportable over newer
> >     versions. I'm not fundamentally against it but it would warrant
> >     some extra documentation (especially in the H1 related specs) to
> >     discourage such use so that we make sure no new protocol adopts
> >     them and stay stuck in a corner.
>
> BTW, there is already another outstanding issue mentioned on this list
> (but not followed with an errata) about HTTP/2 extended CONNECT breaking
> HTTP Digest authentication for an HTTP/1.x request translated to HTTP/2
> since the HTTP method is included in the digest, but the HTTP/1.1
> request sent over HTTP/2 uses HTTP method CONNECT. [1]  Ben noted that
> the issue may also apply to MASQUE protocols.
>
> [1] https://urldefense.com/v3/__https://lists.w3.org/Archives/Public/ietf-http-wg/2024JulSep/0169.html__;!!Bt8RZUm9aw!74ic5DESaXPLq1JkO-MTfn1BE3voxl1MrOzJT0bZxUt6hv0gSOoT-EbqHAsvF7ZDPB7v$

Hmmm interesting. Actually this class of problems can probably be extended
to any info passed in a the request as the method or a header field that's
normally not expected with CONNECT. After all, section 5 of 8441 says:


   The :protocol pseudo-header field MUST be included in the CONNECT
   request, and it MUST have a value of "websocket" to initiate a
   WebSocket connection on an HTTP/2 stream.  Other HTTP request and
   response-header fields, such as those for manipulating cookies, may
   be included in the HEADERS with the CONNECT method as usual.  This
   request replaces the GET-based request in [RFC6455] and is used to
   process the WebSockets opening handshake.

So there's a way to read it as "any field including content-length...".
And for the original method a specific header could be imagined. All of
this just doesn't have totally obvious implications and may require
implementors to be very careful about (which is already the case in
fact).

Cheers,
Willy