Re: HTTP/3 Preface (PRI method)

Nick Harper <ietf@nharper.org> Tue, 29 June 2021 19:41 UTC

Return-Path: <nharper@nharper.org>
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 B56633A3EC6 for <quic@ietfa.amsl.com>; Tue, 29 Jun 2021 12:41:01 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.897
X-Spam-Level:
X-Spam-Status: No, score=-1.897 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001] autolearn=unavailable autolearn_force=no
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 a850TQDGaLnC for <quic@ietfa.amsl.com>; Tue, 29 Jun 2021 12:40:57 -0700 (PDT)
Received: from mail-ua1-f43.google.com (mail-ua1-f43.google.com [209.85.222.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 447A63A3EC4 for <quic@ietf.org>; Tue, 29 Jun 2021 12:40:57 -0700 (PDT)
Received: by mail-ua1-f43.google.com with SMTP id g21so27469uaw.3 for <quic@ietf.org>; Tue, 29 Jun 2021 12:40:57 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Fua0P6IZIZ5zWMyihweR3/JCPOxryPw0TJCQ/GWKyc4=; b=NUX6UYyYQe6lCf5crgiKtTsG6/XPCaB8HP95u39o5Tq7E2rsjQylsLX2nRNxGJ2ZRV vnmsoR7+msz8GjdZQ7HV4A+bmOr8YUdUjujVaBF88qV3bnFV/BAUT+49lzOSkkqpguq8 mekc6e+rA/ze/z1QheDX3Jxv/xTZKmR/TnqtXrh0V+RQEp2IC12QiH12buv5wCaXY1zt /KAj71owWrnNoaxRKh3gbRTINidbCgvH6GxQvTV65dWTuhPmZMfKsQ8b9nC67gB929JY zyGEZ2L5c9I4z0xHpPp7mk4jzz5omvtk5qVR5sGzolO229SHEjlVB9/+F1L+CrfH0T4a l/kQ==
X-Gm-Message-State: AOAM533sFuNS8TH1aIRGvm8/oJoHZpA1I2r9yWQIOtBZCWiRvxUo7Qid oQwxqbWrnQXaXFrl/9kcXhCbw09DqolCLgY4v3zo9w==
X-Google-Smtp-Source: ABdhPJyOMJXM8a2guh9LgPZGr8zRCYLOBdiUpmdTCBqdTk3eYgxJ/0rAhw28Nv7bwOalOsInQLyqClx2qS+s69mJrXY=
X-Received: by 2002:ab0:7196:: with SMTP id l22mr1830068uao.21.1624995655403; Tue, 29 Jun 2021 12:40:55 -0700 (PDT)
MIME-Version: 1.0
References: <4723f90d822b18e3d0402b6496ac1d02@yocto.nu> <CADdTf+im9s_A4LXiwR15R=iLr6X8PJR=J3xq7302WWeGEiOy1A@mail.gmail.com>
In-Reply-To: <CADdTf+im9s_A4LXiwR15R=iLr6X8PJR=J3xq7302WWeGEiOy1A@mail.gmail.com>
From: Nick Harper <ietf@nharper.org>
Date: Tue, 29 Jun 2021 12:40:44 -0700
Message-ID: <CACcvr=muAnmJTm-abN1iQ2JMDiBfYnEUU-27V_78Fn09gvXkbQ@mail.gmail.com>
Subject: Re: HTTP/3 Preface (PRI method)
To: Matt Joras <matt.joras@gmail.com>
Cc: ben=40yocto.nu@dmarc.ietf.org, IETF QUIC WG <quic@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000cd63ba05c5ecc85f"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/tzNxuBvlNswRGGiiJV-3-XqYW_o>
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:41:02 -0000

I agree with Matt that the signalling of the application protocol is best
handled via ALPN and no in-band (e.g. in a STREAM frame) signalling is
needed.

There's also a more fundamental problem with having a preface in HTTP/3.
Unlike a TCP connection where there is a single stream of data (and a
preface can be placed at the beginning of the connection), a QUIC
connection has multiple independent streams of data. There's no sensible
place to place a preface like what HTTP/2 has on a QUIC connection.

On Tue, Jun 29, 2021 at 12:31 PM Matt Joras <matt.joras@gmail.com> wrote:

> 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
>>
>>