HTTP/3 Preface (PRI method)

ben@yocto.nu Tue, 29 June 2021 19:11 UTC

Return-Path: <ben@yocto.nu>
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 C34193A3DFC for <quic@ietfa.amsl.com>; Tue, 29 Jun 2021 12:11:03 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.69
X-Spam-Level:
X-Spam-Status: No, score=-1.69 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, SPF_PASS=-0.001, T_SPF_HELO_TEMPERROR=0.01, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=neutral reason="invalid (public key: OpenSSL error: bad base64 decode)" header.d=yocto.nu
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 36HLWUcJbvMp for <quic@ietfa.amsl.com>; Tue, 29 Jun 2021 12:10:57 -0700 (PDT)
Received: from vps.yocto.eu (vps.yocto.eu [IPv6:2a01:7c8:d002:313::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 0C1003A3DFB for <quic@ietf.org>; Tue, 29 Jun 2021 12:10:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=yocto.nu; s=x; h=Content-Transfer-Encoding:Content-Type:Message-ID:Subject:To:From: Date:MIME-Version:Sender:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=wAgaPATK60bj6rMRR7B4ovv25gIe/JyNJDAcYpToj7Q=; b=CP7qaCWs1jmh/mu+z9tptwvYMd uxiAIy3Eau5nSZufPfFF+JTGUvni86tT3x1924O1j8WAA/UJD1oh8QY+VGDs51bhIVoL1tHE+qiEZ 4DFtGz3Jplis8kv8ov5pSFToKPOUEP0f6rD5cj7A6pU6rl0ZUAArytv7DGJgjPTV15iihIwcJAdD8 p0MbG06X4tfSIMGX4hE/3XGRyAq97WExOLpxqnNcSfw46cXkAqeGelBhYl1dS/jOPuLTW3t1Uve/m pPWWslFoVRTzIeSZm+0+U5ImxoQLAwHNYU/5unXq5E9A4sC1vv4fXF+tg1mAOrttFc3bWtt+RFdju Jj7kaSUQ==;
Received: from localhost ([::1]) by vps.yocto.eu with esmtpa (Exim 4.94) (envelope-from <ben@yocto.nu>) id 1lyJ8B-0007qD-5M for quic@ietf.org; Tue, 29 Jun 2021 19:10:47 +0000
MIME-Version: 1.0
Date: Tue, 29 Jun 2021 21:10:47 +0200
From: ben@yocto.nu
To: quic@ietf.org
Subject: HTTP/3 Preface (PRI method)
Message-ID: <4723f90d822b18e3d0402b6496ac1d02@yocto.nu>
X-Sender: ben@yocto.nu
Content-Type: text/plain; charset="US-ASCII"; format="flowed"
Content-Transfer-Encoding: 7bit
X-Authenticated-Id: ben@yocto.nu
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/DnE_IDr_JtX5bGw3vWbha5P0TH0>
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: Tue, 29 Jun 2021 19:11:04 -0000

Hello all,

When reading about QUIC, it comes to me as a better alternative of TCP, 
build upon UDP.
In this case, servers that run on TCP could easily also run on UDP/QUIC; 
think about DNS, SMTP, FTP.

Now there is also a new version of HTTP. HTTP/3. This version will be 
transfered over QUIC by default.
However, as I mentioned above, it could be possible to have "TCP 
protocols" that use QUIC too.
That makes me think about also transfering some old HTTP versions, for 
example HTTP/0.9 (I came across a library that transfered HTTP/0.9 over 
QUIC).
But also HTTP/1.0, HTTP/1.1 and HTTP/2 are possible.

All older HTTP versions send the following request line: <METHOD> <PATH> 
[VERSION] \n
If an endpoint is directly accessed (without some negotiation), it will 
find out the version directly by reading the first line.
For 0.9 the version will be absent. For 2.0 this will be a preface with 
a PRI method and * as path.

When I think about running a HTTP server, I think about this:

TCP (80) or TCP/SSL (443):
  - HTTP/0.9
  - HTTP/1.0
  - HTTP/1.1
  - HTTP/2.0
  - HTTP/3.0 (I think this is possible too)

UDP/QUIC:
  - HTTP/0.9 (HTTP/0.9 but over QUIC)
  - HTTP/1.0 (HTTP/1.0 but over QUIC)
  - HTTP/1.1 (HTTP/1.1 but over QUIC)
  - HTTP/2.0 (HTTP/2.0 but over QUIC)
  - HTTP/3.0 (Default)

However, if I listen for all versions on my HTTP-QUIC server, how am I 
supposed to know that it is HTTP/3? Does HTTP/3 has a preface? And if 
not, why not?
I think the preface of HTTP/2 is great and I think it would be great in 
HTTP/3 too: PRI * HTTP/3.0

I would like to see a preface added to HTTP/3.0. It is only 18 extra 
bytes at the beginning of the request. It could be ignored by some 
servers if they want, but for servers that want to have backwards 
compatibility it would be a great feature. (Luckily HTTP/3 is not a 
released standard yet.)

Ben