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

Amos Jeffries <squid3@treenet.co.nz>: (Sat Nov 11 16:17:01 2017)
>> 
>> 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.

Wrong.  HTTP/2 does not support Upgrade, therefore it needs negotiation.


8.1.2.2.  Connection-Specific Header Fields
https://tools.ietf.org/html/rfc7540#section-8.1.2.2

"   HTTP/2 does not use the Connection header field to indicate
"   connection-specific header fields; in this protocol, connection-
"   specific metadata is conveyed by other means.  An endpoint MUST NOT
"   generate an HTTP/2 message containing connection-specific header
"   fields; any message containing connection-specific header fields MUST
"   be treated as malformed (Section 8.1.2.6).

And

"      Note: HTTP/2 purposefully does not support upgrade to another
"      protocol.  The handshake methods described in Section 3 are
"      believed sufficient to negotiate the use of alternative protocols.


Indication that Upgrade: is "upgrade HTTP/2 stream to tunnel of another protocol"
need negotiation.

HTTP/1.1 Upgrade: is "upgrade connection to another protocol".

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

Point of SETTINGS is to promise that that frame is interepreted 
accoding of new specification and not accoding of RFC 7540
which means "stream error (Section 5.4.2) of type PROTOCOL_ERROR".

That is treatment of ":upgrade" pseudo header and "Upgrade" connection
header according of RFC 7540.


SETTINGS can not promise anything about next hops on multihop
environment when there is several upstream targets.

You can NOT know that there is Websocket on particular
:path bofore you know this path. SETTINGS can not tell that.

Ability to do Upgrade to websocket is granularity of
URL path. If you change URL path then may be that 
Upgrade is not possible.

/ Kari Hurtta

Received on Saturday, 11 November 2017 15:50:57 UTC