Re: HTTP/3 Preface (PRI method)

ben@yocto.nu Tue, 29 June 2021 19:47 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 75E373A3EF2 for <quic@ietfa.amsl.com>; Tue, 29 Jun 2021 12:47:13 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.7
X-Spam-Level:
X-Spam-Status: No, score=-1.7 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, SPF_PASS=-0.001, 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 65Ys-Etw7GWV for <quic@ietfa.amsl.com>; Tue, 29 Jun 2021 12:47:06 -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 719613A3EEE for <quic@ietf.org>; Tue, 29 Jun 2021 12:47:06 -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:References: In-Reply-To:Subject:Cc:To:From:Date:MIME-Version:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=JwJfJBUPJGOPNsqv79KAPr+mNa5sfYLOxm7d3NaSOjQ=; b=gHa0z9N3QZ59qdSij24BZxLVle 9rEdSeIoB6nG5fWDilrSnIgizo6fE2lXIVy4uHRVROo4sBcA9Z2SE+AjhFnhUBWHHXZZcccyh3NKH L+uVpVtpMCEzAnNF3/asi4tsfv22H2TSS1UrSg95slrGqXJuFqpZNvcjkaXNc62oTtOUbVgd3iJYl 9A7Wz1rj/rReyocSvDRoy/D+ue+e6UnmHvEoDB5HrtQO1hw3nGZ9Hw2wddEPzHuqqpLj6u/Fj9glD Xh6LTAHENUORd/bEK2MKPecYRLs/gBtd6FST+Ja35CZ72syTADZ7VEIVKH+RwRrxaM114JE4pmgeE n5PkgmFQ==;
Received: from localhost ([::1]) by vps.yocto.eu with esmtpa (Exim 4.94) (envelope-from <ben@yocto.nu>) id 1lyJhG-0001rr-P6; Tue, 29 Jun 2021 19:47:02 +0000
MIME-Version: 1.0
Date: Tue, 29 Jun 2021 21:47:02 +0200
From: ben@yocto.nu
To: Matt Joras <matt.joras@gmail.com>
Cc: IETF QUIC WG <quic@ietf.org>
Subject: Re: HTTP/3 Preface (PRI method)
In-Reply-To: <CADdTf+im9s_A4LXiwR15R=iLr6X8PJR=J3xq7302WWeGEiOy1A@mail.gmail.com>
References: <4723f90d822b18e3d0402b6496ac1d02@yocto.nu> <CADdTf+im9s_A4LXiwR15R=iLr6X8PJR=J3xq7302WWeGEiOy1A@mail.gmail.com>
Message-ID: <fc1c52d95748524e5322c1b083ad1ade@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/nYaenytpA1XoAOAUwcnRz_6yRkg>
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:47:14 -0000

I understand. When connecting through QUIC using TLS, it will tell me 
that HTTP/3 is used. However, I see HTTP/3 as protocol that isn't just 
allowed on QUIC, but also still on TCP, because QUIC is a 
TCP-alternative. So, we look to three cases:
  - QUIC: use the ALPN code
  - TCP/SSL: use ALPN code
  - Plain TCP: What to do then? HTTP/3 directly starts with binary.

It seems to me that HTTP should be developed like it is just an 
protocol, not specific made for QUIC or TCP. So in that case, there 
should be placed a preface somewhere.

Matt Joras schreef op 2021-06-29 21:30:

> Hi Ben,
> 
> This issue in general, if I'm understanding you correctly, is solved 
> via the ALPN[1]. I.e., as part of the TLS handshake the server will be 
> able to know which application is being used. For example, "h2" 
> corresponds to HTTP/2 and "h3" corresponds to HTTP/3. Also note that 
> there are no standardized mappings of HTTP over QUIC except for the 
> currently-pending HTTP/3 specification. Future versions of HTTP over 
> QUIC would also be distinguished via ALPN, presumably.
> 
> Best,
> Matt Joras
> 
> [1] https://datatracker.ietf.org/doc/html/rfc7301
> 
> On Tue, Jun 29, 2021 at 12:11 PM <ben=40yocto.nu@dmarc.ietf.org> wrote:
> 
>> 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