Re: Upgrade, hmmm...

Nick Harper <> Sat, 01 August 2020 00:00 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 2EE5C3A0D7E for <>; Fri, 31 Jul 2020 17:00:08 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -10.519
X-Spam-Status: No, score=-10.519 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.001, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (2048-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 2Xv7ta0oXjKa for <>; Fri, 31 Jul 2020 17:00:04 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 9D13B3A0D7D for <>; Fri, 31 Jul 2020 17:00:04 -0700 (PDT)
Received: from lists by with local (Exim 4.92) (envelope-from <>) id 1k1ewD-0007c1-9V for; Fri, 31 Jul 2020 23:59:45 +0000
Resent-Date: Fri, 31 Jul 2020 23:59:45 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <>) id 1k1ewC-0007bO-9B for; Fri, 31 Jul 2020 23:59:44 +0000
Received: from ([2607:f8b0:4864:20::329]) by with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from <>) id 1k1ewA-00022B-CX for; Fri, 31 Jul 2020 23:59:43 +0000
Received: by with SMTP id t7so10129177otp.0 for <>; Fri, 31 Jul 2020 16:59:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=+r3Sj+uMzO4O3Co+FwGb+5WfoIckMWvCM2l8n2CvVc8=; b=q94W8rxAMsrrLMe3+T7EceusVybKUAsZvVtQwMTSbEoZlu3eyTG4LaIMxuK2kpHFt2 vE9k+ok5nhf4bskoU6qNu/8TfyE90dGA60A3j3DyoPnlLFtgW30u7na0gkYXOBjtgDHZ lJoPbDV8OHcpQu5fabOFV8zuc6FFtDMHzTMgJHvTNHHGvsiMI0zkkGMyvpiXOq6RbOug tzjsnypvbLDrjBvByldeT3EvOzCEoyvAy5hX1Y8xIrFi9J0wtgJwlFgSpPcPFyQAkjbN PASyJOQ8MEK72MEoOlwuSQ9Oe2DtHKA1epiJhE4vNENFPWBQ9JtdhswALO/0MKfNfwsy uU3g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=+r3Sj+uMzO4O3Co+FwGb+5WfoIckMWvCM2l8n2CvVc8=; b=bfHpCf3KmSbDCoWTSvehv1fYrBX3HPvtioLGDqRzdffW+RAzGLjj8vCgcdS8GUgc7q HBvQPKPVuih+yz0zP3IgpKt8GvxzTipzVoK71IFEB1/9tHmBqBg6+zWjTQs40R72otLN I3Y/d4+M1aYPAybmsDV12u23grZUCxF16zAQ5xBBWG3lAtGmBIJ3cjzR8Rhed8EPOwIh 0KTC2HbPIg4chirKccVeQjvD0Ik8Nq3wa5XIovRR9SPvvvQuD7sYxgDgNkdxCbBXNsKk LrivOtHiVtsWZPgyeGaKnIpZ+v43wa+JH0C6HCUPgp3V80jjpXMMD9T4RelCRETK9Tmr MhJA==
X-Gm-Message-State: AOAM530113xrn1aVLn4rz3Fe0IPttWRkSD9nbU4Yk9q7Y2mCfgM9w3aq qmscQtKAze4XlItBLRcZcIhPFWF/U2NjjxYxGTbI6Q==
X-Google-Smtp-Source: ABdhPJyI2sEeRyNWDl2aJvHELgWHOScYaH7LShFIKKV+XK/xm0z88pPP5nb0B9l6uhvlf6Xl/005Sw9a7SkTQdAv4eI=
X-Received: by 2002:a05:6830:1d6c:: with SMTP id l12mr4910625oti.275.1596239970884; Fri, 31 Jul 2020 16:59:30 -0700 (PDT)
MIME-Version: 1.0
References: <>
In-Reply-To: <>
From: Nick Harper <>
Date: Fri, 31 Jul 2020 16:59:20 -0700
Message-ID: <>
To: Eric J Bowman <>
Cc: Ietf Http Wg <>
Content-Type: multipart/alternative; boundary="00000000000071400c05abc59456"
Received-SPF: pass client-ip=2607:f8b0:4864:20::329;;
X-W3C-Hub-Spam-Status: No, score=-19.6
X-W3C-Scan-Sig: 1k1ewA-00022B-CX 4f672739ac061418b0e23cbcbf0dbda7
Subject: Re: Upgrade, hmmm...
Archived-At: <>
X-Mailing-List: <> archive/latest/37917
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

On Fri, Jul 31, 2020 at 4:51 PM Eric J Bowman <> wrote:

> Please refer me to previous discussions about why h2 and h2c, but no h1,
> h1c, or h3.
> I'm coding a webserver from scratch, with the goal of serving an
> index.html file and its ancillaries, over any of HTTP/1.1, HTTP/2, HTTP/3,
> FTP, WAKA (if Roy ever publishes it), or "ERIC" because I have my own
> ideas. Encrypted or not (I realize "not" isn't an option with HTTP/3). So
> the main loop is protocol-negotiation hell worse than any conneg/langneg
> I've ever coded.
> If I'm hosting multiple websites on my service, I might want to default to
> h2, at this time. But if one of those client websites is a law firm, they
> don't care about serving legal definitions over "h1c" to incarcerated
> clients, who aren't allowed to use encryption unless it's attorney-client
> privileged communication. So, how does a gateway at the prison wall connect
> using h2 but request "Downgrade: h1c"? Or maybe there could be a "Protocol"
> header with a weighted list (lol).
> (Taking a presentation I watched on YouTube by PHK, to heart -- some
> sovereign states disallow encryption, and heck, America's own FBI wants to
> kill it. But I agree it's important to be able to downgrade to cleartext.)
> Or, why can't an h2c connection request Upgrade: h3? Coding my webserver
> to shift those gears, turns out to be trivial, all things considered at
> this point. So, why are only h2/h2c standardized as Upgrade tokens?

The Upgrade header is used to suggest switching protocols on the *same*
connection. Given that an h2 (or h2c) connection runs on TCP and HTTP/3
runs on UDP, there's no way to upgrade the existing connection to HTTP/3.

> -Eric