Re: [hybi] proxy & ENABLE_UPGRADE SETTINGS | Re: Fwd: New Version Notification for draft-mcmanus-httpbis-h2-websockets-01.txt

Amos Jeffries <> Sat, 11 November 2017 14:17 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 3EEC61200E5 for <>; Sat, 11 Nov 2017 06:17:11 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.107
X-Spam-Status: No, score=-1.107 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RDNS_NONE=0.793, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id JKMkPQ0hqrEZ for <>; Sat, 11 Nov 2017 06:17:09 -0800 (PST)
Received: from (unknown []) by (Postfix) with ESMTP id BEFF412009C for <>; Sat, 11 Nov 2017 06:17:07 -0800 (PST)
Received: from [] (unknown []) by (Postfix) with ESMTPA id 1FC00660057; Sun, 12 Nov 2017 03:17:02 +1300 (NZDT)
To: Kari Hurtta <>, HTTP Working Group <>
Cc: HYBI Working Group <>, Patrick McManus <>
References: <> <>
From: Amos Jeffries <>
Message-ID: <>
Date: Sun, 12 Nov 2017 03:17:01 +1300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0
MIME-Version: 1.0
In-Reply-To: <>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: en-US
Content-Transfer-Encoding: 7bit
Archived-At: <>
Subject: Re: [hybi] proxy & ENABLE_UPGRADE SETTINGS | Re: Fwd: New Version Notification for draft-mcmanus-httpbis-h2-websockets-01.txt
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Server-Initiated HTTP <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Sat, 11 Nov 2017 14:17:11 -0000

On 11/11/17 22:19, Kari Hurtta wrote:
>>      end of connection to client end of connection tells on that case
>>      that server end of connection understand
>>               :upgrade
>>      pseudo header.
>>      It tells nothing about that what is behind of that server end of
>>      connection.
>>      Only after request is sent, http response tells if that authority
>>      and path supporting that upgrade. Error is reported as http status code.
>>      I see that reverse proxy can send SETTINGS   ENABLE_UPGRADE (or
>>      even when it does not konw if next hop supports that. Support
>>      of next hop or origin server is reported by when that protocol
>>      is triedm failure is reported on http status code.
> Amos Jeffries <> wrote:
>> A proxy that sends that ENABLE_UPGRADE is guaranteeing that it *will*
>> service the upgrade and handle the resulting traffic syntax. By itself
>> if necessary.
> I ligthly disagreed.
> ENABLE_UPGRADE just tells that :upgrade is not considered to
> be error which causes stream error of type PROTOCOL_ERROR
> emitted and tells possible full duplex handling (as was on
> :method = CONNECT).
> You can also try Upgrade: on HTTP/1.1 and server or proxy
> have permission to ignore it.   Upgrade is just suggestion
> from client.

If ":upgrade" has the same optional nature as Upgrade did there is zero 
point in creating it. Just use the existing Upgrade header in the 
HEADERS frame. That does not require any negotiation.

The whole point of SETTINGS is to promise the recipient of that frame 
that the things mentioned in it will work. No maybes or guessing.

This guarantee provided by SETTINGS is one of the ways HTTP/2 improves 
over HTTP/1.1. No more sending maybe-ignored headers and hoping for 
success a few RTT later. The client can know up front whether that 
connection is a usable channel for the negotiable feature or not.


>> In the general case a proxy that negotiates a SETTING it cannot
>> guarantee support for is broken. It must instead negotiate a SETTINGS
>> without the feature and re-negotiate with another SETTINGS later when it
>> has better information.
> / Kari Hurtta